Fix for OP_FormattedMessage text link server crashes

This commit is contained in:
Uleat
2015-01-12 01:42:27 -05:00
parent 21e5ccdf88
commit f612082f5d
8 changed files with 62 additions and 38 deletions
+17 -8
View File
@@ -2813,7 +2813,7 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message
if (GetFilter(FilterDamageShields) == FilterHide && type == MT_DS)
return;
int i, argcount, length;
int i = 0, argcount = 0, length = 0;
char *bufptr;
const char *message_arg[9] = {0};
@@ -2826,7 +2826,6 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message
return;
}
i = 0;
message_arg[i++] = message1;
message_arg[i++] = message2;
message_arg[i++] = message3;
@@ -2837,10 +2836,13 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message
message_arg[i++] = message8;
message_arg[i++] = message9;
for(argcount = length = 0; message_arg[argcount]; argcount++)
for(; message_arg[argcount]; ++argcount)
length += strlen(message_arg[argcount]) + 1;
EQApplicationPacket* outapp = new EQApplicationPacket(OP_FormattedMessage, length+13);
if (length == 0)
length = 1;
EQApplicationPacket* outapp = new EQApplicationPacket(OP_FormattedMessage, sizeof(FormattedMessage_Struct) + length);
FormattedMessage_Struct *fm = (FormattedMessage_Struct *)outapp->pBuffer;
fm->string_id = string_id;
fm->type = type;
@@ -2851,6 +2853,8 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message
bufptr += strlen(message_arg[i]) + 1;
}
if (argcount == 0)
bufptr = '\0';
if(distance>0)
entity_list.QueueCloseClients(this,outapp,false,distance);
@@ -2925,7 +2929,7 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil
if (!FilteredMessageCheck(sender, filter))
return;
int i, argcount, length;
int i = 0, argcount = 0, length = 0;
char *bufptr;
const char *message_arg[9] = {0};
@@ -2937,7 +2941,6 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil
return;
}
i = 0;
message_arg[i++] = message1;
message_arg[i++] = message2;
message_arg[i++] = message3;
@@ -2948,10 +2951,13 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil
message_arg[i++] = message8;
message_arg[i++] = message9;
for (argcount = length = 0; message_arg[argcount]; argcount++)
for (; message_arg[argcount]; ++argcount)
length += strlen(message_arg[argcount]) + 1;
EQApplicationPacket *outapp = new EQApplicationPacket(OP_FormattedMessage, length+13);
if (length == 0)
length = 1;
EQApplicationPacket *outapp = new EQApplicationPacket(OP_FormattedMessage, sizeof(FormattedMessage_Struct) + length);
FormattedMessage_Struct *fm = (FormattedMessage_Struct *)outapp->pBuffer;
fm->string_id = string_id;
fm->type = type;
@@ -2961,6 +2967,9 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil
bufptr += strlen(message_arg[i]) + 1;
}
if (argcount == 0)
bufptr = '\0';
QueuePacket(outapp);
safe_delete(outapp);
}