-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
The checks in buffer.cpp were wrong (tim called getDataSize() insted of
getDataMaxSize) . here the whole patch3 rediffed against cvs and with the
right checks.
-----BEGIN PGP SIGNATURE-----
iD8DBQE9I6PkUMlRieHkprgRAiPEAKC8lru/ub954cuigt5vQUqmvGEEOACdFSaU
rqqz4ZCao/bFKvzC6ItcHdc=
=m98Y
-----END PGP SIGNATURE-----
Index: src/buffer.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/buffer.cpp,v
retrieving revision 1.12
diff -u -1 -b -p -r1.12 buffer.cpp
--- src/buffer.cpp 6 May 2002 01:51:26 -0000 1.12
+++ src/buffer.cpp 4 Jul 2002 01:17:09 -0000
@@ -456,2 +456,8 @@ char *CBuffer::PackUnsignedLong(unsigned
{
+ if ( getDataSize() + 4 > getDataMaxSize() )
+ {
+ gLog.Warn("%sPackUnsignedLong(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
put_le_long(getDataPosWrite(), data);
@@ -463,2 +469,8 @@ char *CBuffer::PackUnsignedLongBE(unsign
{
+ if (getDataSize() + 4 > getDataMaxSize() )
+ {
+ gLog.Warn("%sPackUnsignedLongBE(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
put_be_long(getDataPosWrite(), data);
@@ -470,2 +482,8 @@ char *CBuffer::PackChar(char data)
{
+ if (getDataSize() + 1 > getDataMaxSize())
+ {
+ gLog.Warn("%sPackChar(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
*getDataPosWrite() = data;
@@ -477,2 +495,8 @@ char *CBuffer::Pack(const char *data, in
{
+ if ( getDataSize() + size > getDataMaxSize() )
+ {
+ gLog.Warn("%sPack(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
if (!size) return getDataPosWrite();
@@ -485,2 +509,8 @@ char *CBuffer::Pack(CBuffer *buf)
{
+ if ( getDataSize() + buf->getDataSize() > getDataMaxSize() )
+ {
+ gLog.Warn("%sPack(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
memcpy(getDataPosWrite(), buf->getDataStart(), buf->getDataSize());
@@ -503,2 +533,8 @@ char *CBuffer::PackString(const char *da
if (max > 0 && n > max) n = max;
+ if ( getDataSize() + n + 1 > getDataMaxSize() )
+ {
+ gLog.Warn("%sPackString(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
put_le_short(getDataPosWrite(), n + 1);
@@ -514,2 +550,8 @@ char *CBuffer::PackUnsignedShort(unsigne
{
+ if ( getDataSize() + 2 > getDataMaxSize() )
+ {
+ gLog.Warn("%sPackUnsignedShort(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
put_le_short(getDataPosWrite(), data);
@@ -521,2 +563,8 @@ char *CBuffer::PackUnsignedShortBE(unsig
{
+ if ( getDataSize() + 2 > getDataMaxSize() )
+ {
+ gLog.Warn("%sPackUnsignedShortBE(): Trying to pack more data than "
+ "CBuffer can hold!\n", L_WARNxSTR);
+ return getDataPosWrite();
+ }
put_be_short(getDataPosWrite(), data);
Index: src/icqd-chat.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/icqd-chat.cpp,v
retrieving revision 1.11
diff -u -1 -b -p -r1.11 icqd-chat.cpp
--- src/icqd-chat.cpp 24 May 2002 18:45:49 -0000 1.11
+++ src/icqd-chat.cpp 4 Jul 2002 01:17:09 -0000
@@ -552,3 +552,3 @@ CChatManager::CChatManager(CICQDaemon *d
if (fontUnderline) m_nFontFace |= FONT_UNDERLINE;
- strncpy(m_szFontFamily, fontFamily, 64);
+ strncpy(m_szFontFamily, fontFamily, sizeof(m_szFontFamily));
m_nFontSize = fontSize;
@@ -1849,3 +1849,3 @@ void CChatManager::ChangeFontFamily(cons
- strncpy(m_szFontFamily, f, 64);
+ strncpy(m_szFontFamily, f, sizeof(m_szFontFamily));
}
Index: src/icqd-srv.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/icqd-srv.cpp,v
retrieving revision 1.42
diff -u -1 -b -p -r1.42 icqd-srv.cpp
--- src/icqd-srv.cpp 3 Jul 2002 23:15:10 -0000 1.42
+++ src/icqd-srv.cpp 4 Jul 2002 01:17:11 -0000
@@ -1015,3 +1015,3 @@ bool CICQDaemon::ProcessSrvPacket(CBuffe
packet.print(buf));
- delete buf;
+ delete [] buf;
return false;
@@ -1168,3 +1168,3 @@ void CICQDaemon::ProcessServiceFam(CBuff
packet.print(buf));
- delete buf;
+ delete [] buf;
break;
@@ -1906,2 +1906,3 @@ void CICQDaemon::ProcessListFam(CBuffer
gLog.Error("%sUnable to parse contact list TLV, aborting!\n", L_ERRORxSTR);
+ delete [] szName;
return;
@@ -2022,3 +2023,3 @@ void CICQDaemon::ProcessVariousFam(CBuff
packet.print(buf));
- delete buf;
+ delete [] buf;
break;
@@ -2032,3 +2033,3 @@ void CICQDaemon::ProcessVariousFam(CBuff
packet.print(buf));
- delete buf;
+ delete [] buf;
break;
Index: src/icqd-udp.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/icqd-udp.cpp,v
retrieving revision 1.32
diff -u -1 -b -p -r1.32 icqd-udp.cpp
--- src/icqd-udp.cpp 10 Jan 2002 03:24:43 -0000 1.32
+++ src/icqd-udp.cpp 4 Jul 2002 01:17:12 -0000
@@ -1595,3 +1595,3 @@ unsigned short CICQDaemon::ProcessUdpPac
nCommand, packet.print(buf));
- delete buf;
+ delete [] buf;
break;
@@ -1616,3 +1616,3 @@ void CICQDaemon::ProcessSystemMessage(CB
gLog.Unknown("%sInvalid system message (UIN = 0):\n%s\n", L_UNKNOWNxSTR, packet.print(buf));
- delete buf;
+ delete [] buf;
}