image
07-21-2011, 10:25 AM
Pointers are not checked and people can send in bogus data. I added in bold what needs to be changed.
client_packet.cpp
Old Section:
Entity* entity = entity_list.GetID(ds->target_id);
Entity* initiator = entity_list.GetID(ds->entity_id);
if(!entity->IsClient() || !initiator->IsClient())
return;
void Client::Handle_OP_DuelResponse(const EQApplicationPacket *app)
{
if(app->size != sizeof(DuelResponse_Struct))
return;
DuelResponse_Struct* ds = (DuelResponse_Struct*) app->pBuffer;
Client* entity = entity_list.GetClientByID(ds->target_id);
Client* initiator = entity_list.GetClientByID(ds->entity_id);
if ( !entity )
{
LogFile->write(EQEMuLog::Debug, "Handle_OP_DuelResponse had a bad entity passed by %s.", GetName());
return;
}
else if ( !initiator )
{
LogFile->write(EQEMuLog::Debug, "Handle_OP_DuelResponse had a bad initiator passed by %s.", GetName());
return;
}
entity->CastToClient()->SetDuelTarget(0);
entity->CastToClient()->SetDueling(false);
initiator->CastToClient()->SetDuelTarget(0);
initiator->CastToClient()->SetDueling(false);
if(GetID() == initiator->GetID())
entity->CastToClient()->Message_StringID(10,DUEL_DECLINE,initiator->GetName());
else
initiator->CastToClient()->Message_StringID(10,DUEL_DECLINE,entity->GetName());
return;
}
client_packet.cpp
Old Section:
Entity* entity = entity_list.GetID(ds->target_id);
Entity* initiator = entity_list.GetID(ds->entity_id);
if(!entity->IsClient() || !initiator->IsClient())
return;
void Client::Handle_OP_DuelResponse(const EQApplicationPacket *app)
{
if(app->size != sizeof(DuelResponse_Struct))
return;
DuelResponse_Struct* ds = (DuelResponse_Struct*) app->pBuffer;
Client* entity = entity_list.GetClientByID(ds->target_id);
Client* initiator = entity_list.GetClientByID(ds->entity_id);
if ( !entity )
{
LogFile->write(EQEMuLog::Debug, "Handle_OP_DuelResponse had a bad entity passed by %s.", GetName());
return;
}
else if ( !initiator )
{
LogFile->write(EQEMuLog::Debug, "Handle_OP_DuelResponse had a bad initiator passed by %s.", GetName());
return;
}
entity->CastToClient()->SetDuelTarget(0);
entity->CastToClient()->SetDueling(false);
initiator->CastToClient()->SetDuelTarget(0);
initiator->CastToClient()->SetDueling(false);
if(GetID() == initiator->GetID())
entity->CastToClient()->Message_StringID(10,DUEL_DECLINE,initiator->GetName());
else
initiator->CastToClient()->Message_StringID(10,DUEL_DECLINE,entity->GetName());
return;
}