Fourth patch. -- Tim van Erven <[EMAIL PROTECTED]> OpenPGP Key ID: 712CB811 Fingerprint: F6C9 61EE 242C C012 36D5 BBF8 6310 D557 712C B811
diff -u -ru -X dontdiff licq-p2/src/buffer.cpp licq/src/buffer.cpp --- licq-p2/src/buffer.cpp Thu Jun 13 01:56:31 2002 +++ licq/src/buffer.cpp Thu Jun 13 23:07:25 2002 @@ -458,6 +458,12 @@ //-----add---------------------------------------------------------------------- char *CBuffer::PackUnsignedLong(unsigned long data) { + if (getDataPosWrite() + 4 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackUnsignedLong(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } put_le_long(getDataPosWrite(), data); incDataPosWrite(4); return getDataPosWrite() - 4; @@ -465,6 +471,12 @@ char *CBuffer::PackUnsignedLongBE(unsigned long data) { + if (getDataPosWrite() + 4 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackUnsignedLongBE(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } put_be_long(getDataPosWrite(), data); incDataPosWrite(4); return getDataPosWrite() - 4; @@ -472,6 +484,12 @@ char *CBuffer::PackChar(char data) { + if (getDataPosWrite() + 1 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackChar(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } *getDataPosWrite() = data; incDataPosWrite(1); return getDataPosWrite() - 1; @@ -479,6 +497,12 @@ char *CBuffer::Pack(const char *data, int size) { + if (getDataPosWrite() + size > getDataStart() + getDataSize()) + { + gLog.Warn("%sPack(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } if (!size) return getDataPosWrite(); memcpy(getDataPosWrite(), data, size); incDataPosWrite(size); @@ -487,6 +511,13 @@ char *CBuffer::Pack(CBuffer *buf) { + if (getDataPosWrite() + buf->getDataSize() > + getDataStart() + getDataSize()) + { + gLog.Warn("%sPack(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } memcpy(getDataPosWrite(), buf->getDataStart(), buf->getDataSize()); incDataPosWrite(buf->getDataSize()); return getDataPosWrite() - buf->getDataSize(); @@ -494,17 +525,23 @@ char *CBuffer::PackLNTS(const char *data) { - int size = strlen(data) + 1; - if (!size) return getDataPosWrite(); - PackUnsignedShort(size); - Pack(data, size); - return getDataPosWrite() - size; + int size = strlen(data) + 1; + if (!size) return getDataPosWrite(); + PackUnsignedShort(size); + Pack(data, size); + return getDataPosWrite() - size; } char *CBuffer::PackString(const char *data, unsigned short max) { unsigned short n = (data == NULL ? 0 : strlen(data)); if (max > 0 && n > max) n = max; + if (getDataPosWrite() + n + 1 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackString(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } put_le_short(getDataPosWrite(), n + 1); incDataPosWrite(2); memcpy(getDataPosWrite(), data, n); @@ -516,6 +553,12 @@ char *CBuffer::PackUnsignedShort(unsigned short data) { + if (getDataPosWrite() + 2 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackUnsignedShort(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } put_le_short(getDataPosWrite(), data); incDataPosWrite(2); return getDataPosWrite() - 2; @@ -523,6 +566,12 @@ char *CBuffer::PackUnsignedShortBE(unsigned short data) { + if (getDataPosWrite() + 2 > getDataStart() + getDataSize()) + { + gLog.Warn("%sPackUnsignedShortBE(): Trying to pack more data than " + "CBuffer can hold!\n", L_WARNxSTR); + return getDataPosWrite(); + } put_be_short(getDataPosWrite(), data); incDataPosWrite(2); return getDataPosWrite() - 2; diff -u -ru -X dontdiff licq-p2/src/icqd-chat.cpp licq/src/icqd-chat.cpp --- licq-p2/src/icqd-chat.cpp Thu Jun 13 01:56:31 2002 +++ licq/src/icqd-chat.cpp Sat Jun 15 17:34:49 2002 @@ -550,7 +550,7 @@ if (fontBold) m_nFontFace |= FONT_BOLD; if (fontItalic) m_nFontFace |= FONT_ITALIC; if (fontUnderline) m_nFontFace |= FONT_UNDERLINE; - strncpy(m_szFontFamily, fontFamily, 64); + strncpy(m_szFontFamily, fontFamily, sizeof(m_szFontFamily)); m_nFontSize = fontSize; m_nColorFore[0] = fr; m_nColorFore[1] = fg; @@ -1847,7 +1847,7 @@ // 0x22ba baltic SendBuffer(&buf, CHAT_FONTxFAMILY); - strncpy(m_szFontFamily, f, 64); + strncpy(m_szFontFamily, f, sizeof(m_szFontFamily)); } diff -u -ru -X dontdiff licq-p2/src/icqd-srv.cpp licq/src/icqd-srv.cpp --- licq-p2/src/icqd-srv.cpp Thu Jun 13 01:56:31 2002 +++ licq/src/icqd-srv.cpp Thu Jun 13 13:42:51 2002 @@ -1013,7 +1013,7 @@ char *buf; gLog.Unknown("%sUnknown server response:\n%s\n", L_UNKNOWNxSTR, packet.print(buf)); - delete buf; + delete [] buf; return false; } @@ -1166,7 +1166,7 @@ char *buf; gLog.Unknown("%sUnknown server response:\n%s\n", L_UNKNOWNxSTR, packet.print(buf)); - delete buf; + delete [] buf; break; } @@ -1904,7 +1904,7 @@ if (!packet.readTLV(-1, nByteLen)) { gLog.Error("%sUnable to parse contact list TLV, aborting!\n", L_ERRORxSTR); - delete[] szName; + delete [] szName; return; } } @@ -2023,7 +2023,7 @@ char *buf; gLog.Unknown("%sUnknown server response:\n%s\n", L_UNKNOWNxSTR, packet.print(buf)); - delete buf; + delete [] buf; break; } @@ -2033,7 +2033,7 @@ char *buf; gLog.Unknown("%sUnknown server response:\n%s\n", L_UNKNOWNxSTR, packet.print(buf)); - delete buf; + delete [] buf; break; } diff -u -ru -X dontdiff licq-p2/src/icqd-udp.cpp licq/src/icqd-udp.cpp --- licq-p2/src/icqd-udp.cpp Thu Jun 13 01:56:31 2002 +++ licq/src/icqd-udp.cpp Thu Jun 13 13:44:03 2002 @@ -1593,7 +1593,7 @@ char *buf; gLog.Unknown("%sUnknown server command %d:\n%s\n", L_UNKNOWNxSTR, nCommand, packet.print(buf)); - delete buf; + delete [] buf; break; } } @@ -1614,7 +1614,7 @@ { char *buf; gLog.Unknown("%sInvalid system message (UIN = 0):\n%s\n", L_UNKNOWNxSTR, packet.print(buf)); - delete buf; + delete [] buf; } #if 0