DoS vulnerability (invalid player id spam)
db_clientdesc->DBPacket(HEADER_GD_PLAYER_LOAD, d->GetHandle(), &player_load_packet, sizeof(TPlayerLoadPacket));
if (player_load_packet.player_id == 0)
{
sys_err("invalid player_id from account %d\n",c_r.id);
d->DelayedDisconnect(0);
return;
}
it should look like following
if (player_load_packet.player_id == 0)
{
sys_err("invalid player_id from account %d\n",c_r.id);
d->DelayedDisconnect(0);
return;
}
db_clientdesc->DBPacket(HEADER_GD_PLAYER_LOAD, d->GetHandle(), &player_load_packet, sizeof(TPlayerLoadPacket));
search for
if (!c_r.players[p->index].bChangeName)
add above
if (c_r.players[p->index].dwID == 0)
{
sys_err("invalid player_id from account %d\n", c_r.id);
d->DelayedDisconnect(0);
return;
}
search for
if (c_r.players[pinfo->player_index].bChangeName)
add above
if (c_r.players[pinfo->player_index].dwID == 0)
{
sys_err("invalid player_id from account %d\n", c_r.id);
d->DelayedDisconnect(0);
return;
}
search for
sys_err("EmpireSelectFailed %d", r.players[i].dwID);
add below