From 8c6ca51927e015669947aef809a2f8455273a359 Mon Sep 17 00:00:00 2001 From: phr0z3nt04st Date: Wed, 26 May 2010 22:46:47 -0500 Subject: [PATCH] Localize the buffer for less error possibility of heap corruption, messed with messagelog buffers too... commented changes. --- indra/llmessage/llmessagelog.cpp | 6 +++++- indra/newview/llfloatermessagelog.cpp | 16 ++++++++-------- indra/newview/llfloatermessagelog.h | 1 - 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/indra/llmessage/llmessagelog.cpp b/indra/llmessage/llmessagelog.cpp index e197824b6..d62af6993 100644 --- a/indra/llmessage/llmessagelog.cpp +++ b/indra/llmessage/llmessagelog.cpp @@ -20,7 +20,11 @@ LLMessageLogEntry::LLMessageLogEntry(EType type, LLHost from_host, LLHost to_hos LLMessageLogEntry::~LLMessageLogEntry() { // wtf, I'm not supposed to do this? - //if(mData && mDataSize) delete[] mData; + /*if(mData && mDataSize) + { + delete[] mData; + mData = NULL; + }*/ } U32 LLMessageLog::sMaxSize = 4096; // testzone fixme todo boom std::deque LLMessageLog::sDeque; diff --git a/indra/newview/llfloatermessagelog.cpp b/indra/newview/llfloatermessagelog.cpp index 07392d4b1..8bf9a12bf 100644 --- a/indra/newview/llfloatermessagelog.cpp +++ b/indra/newview/llfloatermessagelog.cpp @@ -26,7 +26,7 @@ LLNetListItem::LLNetListItem(LLUUID id) //////////////////////////////// // LLFloaterMessageLogItem //////////////////////////////// -U8 LLFloaterMessageLogItem::sDecodeBuffer[8192]; +#define MAX_PACKET_LEN (0x2000) LLTemplateMessageReader* LLFloaterMessageLogItem::sTemplateMessageReader = NULL; LLFloaterMessageLogItem::LLFloaterMessageLogItem(LLMessageLogEntry entry) : LLMessageLogEntry(entry.mType, entry.mFromHost, entry.mToHost, entry.mData, entry.mDataSize) @@ -41,9 +41,10 @@ LLFloaterMessageLogItem::LLFloaterMessageLogItem(LLMessageLogEntry entry) { BOOL decode_invalid = FALSE; S32 decode_len = mDataSize; - memcpy(sDecodeBuffer, mData, decode_len); - mFlags = sDecodeBuffer[0]; - U8* decodep = &(sDecodeBuffer[0]); + U8 DecodeBuffer[MAX_PACKET_LEN]; + memcpy(DecodeBuffer, mData, decode_len); + mFlags = DecodeBuffer[0]; + U8* decodep = &(DecodeBuffer[0]); gMessageSystem->zeroCodeExpand(&decodep, &decode_len); if(decode_len < 7) decode_invalid = TRUE; @@ -120,8 +121,6 @@ LLFloaterMessageLogItem::LLFloaterMessageLogItem(LLMessageLogEntry entry) for(S32 i = 0; i < mDataSize; i++) mSummary.append(llformat("%02X ", mData[i])); } - //lets play cleanup - memset(sDecodeBuffer, 0, mDataSize); } else // not template { @@ -143,8 +142,9 @@ std::string LLFloaterMessageLogItem::getFull(BOOL show_header) { BOOL decode_invalid = FALSE; S32 decode_len = mDataSize; - memcpy(sDecodeBuffer, mData, decode_len); - U8* decodep = &(sDecodeBuffer[0]); + U8 DecodeBuffer[MAX_PACKET_LEN]; + memcpy(DecodeBuffer, mData, decode_len); + U8* decodep = &(DecodeBuffer[0]); gMessageSystem->zeroCodeExpand(&decodep, &decode_len); if(decode_len < 7) decode_invalid = TRUE; diff --git a/indra/newview/llfloatermessagelog.h b/indra/newview/llfloatermessagelog.h index 1e1d83cf8..b13c7fbb7 100644 --- a/indra/newview/llfloatermessagelog.h +++ b/indra/newview/llfloatermessagelog.h @@ -25,7 +25,6 @@ public: std::string getFull(BOOL show_header = TRUE); BOOL isOutgoing(); private: - static U8 sDecodeBuffer[8192]; static LLTemplateMessageReader* sTemplateMessageReader; static std::string getString(LLTemplateMessageReader* readerp, const char* block_name, S32 block_num, const char* var_name, e_message_variable_type var_type, BOOL &returned_hex, BOOL summary_mode = FALSE); };