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


Reply via email to