Third 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-p1/include/licq_buffer.h licq/include/licq_buffer.h
--- licq-p1/include/licq_buffer.h       Wed Jun 12 16:09:31 2002
+++ licq/include/licq_buffer.h  Thu Jun 13 01:09:50 2002
@@ -84,10 +84,10 @@
    CBuffer& operator >> (unsigned char &in);
    CBuffer& operator >> (unsigned short &in);
    CBuffer& operator >> (unsigned long &in);
-   char *UnpackString(char *);
-   char *UnpackString();
-   char *UnpackStringBE(char *);
-   char *UnpackStringBE();
+   char *UnpackString(char *, unsigned short);
+   char *UnpackString();                // Need to delete[] returned string
+   char *UnpackStringBE(char *, unsigned short);
+   char *UnpackStringBE();              // Need to delete[] returned string
    unsigned long UnpackUnsignedLong();
    unsigned long UnpackUinString();
    unsigned short UnpackUnsignedShort();
@@ -118,7 +118,7 @@
    unsigned long UnpackUnsignedLongTLV(unsigned short);
    unsigned short UnpackUnsignedShortTLV(unsigned short);
    unsigned char UnpackCharTLV(unsigned short);
-   char *UnpackStringTLV(unsigned short);
+   char *UnpackStringTLV(unsigned short); // Need to delete[] returned string
    CBuffer UnpackTLV(unsigned short);
 
 private:
diff -u -ru -X dontdiff licq-p1/include/licq_chat.h licq/include/licq_chat.h
--- licq-p1/include/licq_chat.h Wed Jun 12 16:09:31 2002
+++ licq/include/licq_chat.h    Thu Jun 13 00:06:26 2002
@@ -182,7 +182,7 @@
   CChatClient(ICQUser *);
 
   // Initialize from the handshake buffer (does not set the session
-  // or port fields however
+  // or port fields however)
   bool LoadFromHandshake_v2(CBuffer &);
   bool LoadFromHandshake_v4(CBuffer &);
   bool LoadFromHandshake_v6(CBuffer &);
diff -u -ru -X dontdiff licq-p1/src/buffer.cpp licq/src/buffer.cpp
--- licq-p1/src/buffer.cpp      Wed Jun 12 16:09:32 2002
+++ licq/src/buffer.cpp Thu Jun 13 01:16:03 2002
@@ -299,17 +299,19 @@
   return(*this);
 }
 
-char *CBuffer::UnpackStringBE(char* sz)
+char *CBuffer::UnpackStringBE(char* sz, unsigned short _usiSize)
 {
   unsigned short nLen;
   sz[0] = '\0';
   *this >> nLen;
   rev_e_short(nLen);
+  nLen = nLen < _usiSize ? nLen : _usiSize - 1;
   for (unsigned short i = 0; i < nLen; i++) *this >> sz[i];
   sz[nLen] = '\0';
   return sz;
 }
 
+// Need to delete[] returned string
 char *CBuffer::UnpackStringBE()
 {
   unsigned short nLen;
@@ -322,16 +324,18 @@
   return sz;
 }
 
-char *CBuffer::UnpackString(char *sz)
+char *CBuffer::UnpackString(char *sz, unsigned short _usiSize)
 {
   unsigned short nLen;
   sz[0] = '\0';
   *this >> nLen;
+  nLen = nLen < _usiSize ? nLen : _usiSize - 1;
   for (unsigned short i = 0; i < nLen; i++) *this >> sz[i];
   sz[nLen] = '\0';
   return sz;
 }
 
+// Need to delete[] returned string
 char *CBuffer::UnpackString()
 {
   unsigned short nLen;
@@ -687,6 +691,7 @@
   return nRet;
 }
 
+// Need to delete[] returned string
 char *CBuffer::UnpackStringTLV(unsigned short nType)
 {
   char *str = 0;
diff -u -ru -X dontdiff licq-p1/src/icqd-chat.cpp licq/src/icqd-chat.cpp
--- licq-p1/src/icqd-chat.cpp   Wed Jun 12 16:09:32 2002
+++ licq/src/icqd-chat.cpp      Thu Jun 13 01:13:13 2002
@@ -71,7 +71,7 @@
   b.UnpackUnsignedLong();
   b.UnpackUnsignedLong();
   m_nUin = b.UnpackUnsignedLong();
-  m_szName = strdup(b.UnpackString(buf));
+  m_szName = strdup(b.UnpackString(buf, sizeof(buf)));
   m_nPort = b.UnpackUnsignedShort();
   m_nPort = (m_nPort >> 8) + (m_nPort << 8);
   m_nColorForeRed = (unsigned char)b.UnpackChar();
@@ -270,7 +270,7 @@
 
   b.UnpackUnsignedLong();
   m_nUin = b.UnpackUnsignedLong();
-  m_szName = strdup(b.UnpackString(buf));
+  m_szName = strdup(b.UnpackString(buf, sizeof(buf)));
   m_nColorForeRed = (unsigned char)b.UnpackChar();
   m_nColorForeGreen = (unsigned char)b.UnpackChar();
   m_nColorForeBlue = (unsigned char)b.UnpackChar();
@@ -288,7 +288,7 @@
   m_nSession = b.UnpackUnsignedShort();
   m_nFontSize = b.UnpackUnsignedLong();
   m_nFontFace = b.UnpackUnsignedLong();
-  m_szFontFamily = strdup(b.UnpackString(buf));
+  m_szFontFamily = strdup(b.UnpackString(buf, sizeof(buf)));
   b.UnpackUnsignedShort();
 
   // Read out client packets
@@ -345,7 +345,7 @@
   m_nSession = b.UnpackUnsignedShort();
   m_nFontSize = b.UnpackUnsignedLong();
   m_nFontFace = b.UnpackUnsignedLong();
-  m_szFontFamily = strdup(b.UnpackString(buf));
+  m_szFontFamily = strdup(b.UnpackString(buf, sizeof(buf)));
 }
 
 /*
@@ -373,7 +373,7 @@
   char buf[128];
 
   //b.UnpackChar(); // CHAT_CHANGExFONT
-  b.UnpackString(buf);
+  b.UnpackString(buf, sizeof(buf));
   b.UnpackUnsignedShort();  // Charset?
 
   m_szFontFamily = strdup(buf);
diff -u -ru -X dontdiff licq-p1/src/icqd-filetransfer.cpp 
licq/src/icqd-filetransfer.cpp
--- licq-p1/src/icqd-filetransfer.cpp   Wed Jun 12 16:09:32 2002
+++ licq/src/icqd-filetransfer.cpp      Thu Jun 13 01:16:09 2002
@@ -375,7 +375,7 @@
       m_nBatchFiles = b.UnpackUnsignedLong();
       m_nBatchSize = b.UnpackUnsignedLong();
       m_nSpeed = b.UnpackUnsignedLong();
-      b.UnpackString(m_szRemoteName);
+      b.UnpackString(m_szRemoteName, sizeof(m_szRemoteName));
 
       m_nBatchStartTime = time(TIME_NOW);
       m_nBatchBytesTransfered = m_nBatchPos = 0;
@@ -422,7 +422,7 @@
         return false;
       }
       b.UnpackChar();
-      b.UnpackString(m_szFileName);
+      b.UnpackString(m_szFileName, sizeof(m_szFileName));
       b.UnpackUnsignedShort(); // 0 length string...?
       b.UnpackChar();
       m_nFileSize = b.UnpackUnsignedLong();
@@ -549,7 +549,7 @@
         return false;
       }
       m_nSpeed = b.UnpackUnsignedLong();
-      b.UnpackString(m_szRemoteName);
+      b.UnpackString(m_szRemoteName, sizeof(m_szRemoteName));
 
       // Send file info packet
       CPFile_Info p(*m_iPathName);
diff -u -ru -X dontdiff licq-p1/src/icqd-srv.cpp licq/src/icqd-srv.cpp
--- licq-p1/src/icqd-srv.cpp    Wed Jun 12 16:09:32 2002
+++ licq/src/icqd-srv.cpp       Thu Jun 13 01:49:38 2002
@@ -1904,6 +1904,7 @@
           if (!packet.readTLV(-1, nByteLen))
           {
             gLog.Error("%sUnable to parse contact list TLV, aborting!\n", 
L_ERRORxSTR);
+            delete[] szName;
             return;
           }
         }
@@ -1953,6 +1954,7 @@
         }  // switch (nType)
 
         packet.cleanupTLV();
+        delete[] szName;
       } // for count
 
       // Update local info about contact list
@@ -2009,6 +2011,7 @@
 {
   /*unsigned long Flags =*/ packet.UnpackUnsignedLongBE();
   unsigned short nSubSequence = packet.UnpackUnsignedShortBE();
+  char *tmp;
 
   switch (nSubtype)
   {
@@ -2063,8 +2066,8 @@
       nTypeMsg &= ~ICQ_CMDxSUB_FxMULTIREC;
       
       char* szMessage = new char[msg.getDataMaxSize()];
-      msg.UnpackString(szMessage); // 2 byte length little endian + string
-      
+      // 2 byte length little endian + string
+      msg.UnpackString(szMessage, msg.getDataMaxSize());      
       char *szType = NULL;
       unsigned short nTypeEvent = 0;
       CUserEvent *eEvent = NULL;
@@ -2620,10 +2623,10 @@
         nFoundUin = msg.UnpackUnsignedLong();
         CSearchAck *s = new CSearchAck(nFoundUin);;
                
-        s->m_szAlias = strdup(msg.UnpackString(szTemp));
-       s->m_szFirstName = strdup(msg.UnpackString(szTemp));
-       s->m_szLastName = strdup(msg.UnpackString(szTemp));
-       s->m_szEmail = strdup(msg.UnpackString(szTemp));
+        s->m_szAlias = strdup(msg.UnpackString(szTemp, sizeof(szTemp)));
+       s->m_szFirstName = strdup(msg.UnpackString(szTemp, sizeof(szTemp)));
+       s->m_szLastName = strdup(msg.UnpackString(szTemp, sizeof(szTemp)));
+       s->m_szEmail = strdup(msg.UnpackString(szTemp, sizeof(szTemp)));
        msg.UnpackChar(); // authorization required
        s->m_nStatus = msg.UnpackChar();
        msg.UnpackChar(); // unknown
@@ -2703,17 +2706,28 @@
 
            // main home info
            u->SetEnableSave(false);
-           u->SetAlias( msg.UnpackString() );
-           u->SetFirstName( msg.UnpackString() );
-           u->SetLastName( msg.UnpackString() );
-           u->SetEmailPrimary( msg.UnpackString() );
-           u->SetCity( msg.UnpackString() );
-           u->SetState( msg.UnpackString() );
-           u->SetPhoneNumber( msg.UnpackString() );
-           u->SetFaxNumber( msg.UnpackString() );
-           u->SetAddress( msg.UnpackString() );
-           u->SetCellularNumber( msg.UnpackString() );
-           u->SetZipCode( msg.UnpackString() );
+           u->SetAlias( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetFirstName( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetLastName( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetEmailPrimary( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCity( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetState( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetPhoneNumber( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetFaxNumber( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetAddress( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCellularNumber( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetZipCode( tmp = msg.UnpackString() );
+            delete[] tmp;
            u->SetCountryCode( msg.UnpackUnsignedShort() );
            u->SetTimezone( msg.UnpackChar() );
            u->SetHideEmail( msg.UnpackChar() ); // 0 = no, 1 = yes
@@ -2749,7 +2763,8 @@
            u->SetEnableSave(false);
            u->SetAge( msg.UnpackUnsignedShort() );
            u->SetGender( msg.UnpackChar() );
-           u->SetHomepage( msg.UnpackString() );
+           u->SetHomepage( tmp = msg.UnpackString() );
+            delete[] tmp;
            u->SetBirthYear( msg.UnpackUnsignedShort() );
            u->SetBirthMonth( msg.UnpackChar() );
            u->SetBirthDay (msg.UnpackChar() );
@@ -2782,11 +2797,13 @@
            for(int i = 0; i < nEmail; i++) {
                msg.UnpackChar(); // publish email, not yet implemented
                if(i == 0) {
-                   u->SetEmailSecondary( msg.UnpackString() );
+                   u->SetEmailSecondary( tmp = msg.UnpackString() );
+                    delete[] tmp;
                    gTranslator.ServerToClient(u->GetEmailSecondary());
                }
                if(i == 1) {
-                   u->SetEmailOld( msg.UnpackString() );
+                   u->SetEmailOld( tmp = msg.UnpackString() );
+                    delete[] tmp;
                    gTranslator.ServerToClient(u->GetEmailOld());
                }
            }
@@ -2826,18 +2843,28 @@
            gLog.Info("%sWork info on %s (%ld).\n", L_SRVxSTR, u->GetAlias(), 
u->Uin());
 
            u->SetEnableSave(false);
-           u->SetCompanyCity( msg.UnpackString() );
-           u->SetCompanyState( msg.UnpackString() );
-           u->SetCompanyPhoneNumber( msg.UnpackString() );
-           u->SetCompanyFaxNumber( msg.UnpackString() );
-           u->SetCompanyAddress( msg.UnpackString() );
-           u->SetCompanyZip( msg.UnpackString() );
+           u->SetCompanyCity( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyState( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyPhoneNumber( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyFaxNumber( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyAddress( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyZip( tmp = msg.UnpackString() );
+            delete[] tmp;
            u->SetCompanyCountry( msg.UnpackUnsignedShort() );
-           u->SetCompanyName( msg.UnpackString() );
-           u->SetCompanyDepartment( msg.UnpackString() );
-           u->SetCompanyPosition( msg.UnpackString() );
+           u->SetCompanyName( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyDepartment( tmp = msg.UnpackString() );
+            delete[] tmp;
+           u->SetCompanyPosition( tmp = msg.UnpackString() );
+            delete[] tmp;
            msg.UnpackUnsignedShort(); // unknown
-           u->SetCompanyHomepage( msg.UnpackString() );
+           u->SetCompanyHomepage( tmp = msg.UnpackString() );
+            delete[] tmp;
 
            // translating string with Translation Table
            gTranslator.ServerToClient(u->GetCompanyCity());
diff -u -ru -X dontdiff licq-p1/src/icqd-tcp.cpp licq/src/icqd-tcp.cpp
--- licq-p1/src/icqd-tcp.cpp    Wed Jun 12 16:09:32 2002
+++ licq/src/icqd-tcp.cpp       Thu Jun 13 01:41:40 2002
@@ -1311,7 +1311,7 @@
       case ICQ_CMDxSUB_CHAT:
       {
         char szChatClients[1024];
-        packet.UnpackString(szChatClients);
+        packet.UnpackString(szChatClients, sizeof(szChatClients));
         packet.UnpackUnsignedLong(); // reversed port
         unsigned short nPort = packet.UnpackUnsignedLong();
         if (nInVersion <= 4) packet >> theSequence;
@@ -1526,7 +1526,7 @@
       case ICQ_CMDxSUB_CHAT:
       {
         char ul[1024];
-        packet.UnpackString(ul);
+        packet.UnpackString(ul, sizeof(ul));
         packet >> nPortReversed   // port backwards
                >> nPort;    // port to connect to for chat
         if (nInVersion <= 4) packet >> theSequence;
diff -u -ru -X dontdiff licq-p1/src/icqd-udp.cpp licq/src/icqd-udp.cpp
--- licq-p1/src/icqd-udp.cpp    Wed Jun 12 16:09:32 2002
+++ licq/src/icqd-udp.cpp       Thu Jun 13 01:46:48 2002
@@ -958,10 +958,10 @@
       // read in the four data fields; alias, first name, last name, and email address
       u->SetEnableSave(false);
       char temp[MAX_DATA_LEN], cAuthorization;
-      u->SetAlias(packet.UnpackString(temp));
-      u->SetFirstName(packet.UnpackString(temp));
-      u->SetLastName(packet.UnpackString(temp));
-      u->SetEmailPrimary(packet.UnpackString(temp));
+      u->SetAlias(packet.UnpackString(temp, sizeof(temp)));
+      u->SetFirstName(packet.UnpackString(temp, sizeof(temp)));
+      u->SetLastName(packet.UnpackString(temp, sizeof(temp)));
+      u->SetEmailPrimary(packet.UnpackString(temp, sizeof(temp)));
       packet >> cAuthorization;
       u->SetAuthorization(cAuthorization == 0 ? true : false);
 
@@ -1020,15 +1020,15 @@
       u->SetEnableSave(false);
       char sTemp[MAX_MESSAGE_SIZE];
 
-      u->SetCity(packet.UnpackString(sTemp));
+      u->SetCity(packet.UnpackString(sTemp, sizeof(sTemp)));
       u->SetCountryCode(packet.UnpackUnsignedShort());
       u->SetTimezone(packet.UnpackChar());
-      u->SetState(packet.UnpackString(sTemp));
+      u->SetState(packet.UnpackString(sTemp, sizeof(sTemp)));
       u->SetAge(packet.UnpackUnsignedShort());
       u->SetGender(packet.UnpackChar());
-      u->SetPhoneNumber(packet.UnpackString(sTemp));
-      u->SetHomepage(packet.UnpackString(sTemp));
-      u->SetAbout(packet.UnpackString(sTemp));
+      u->SetPhoneNumber(packet.UnpackString(sTemp, sizeof(sTemp)));
+      u->SetHomepage(packet.UnpackString(sTemp, sizeof(sTemp)));
+      u->SetAbout(packet.UnpackString(sTemp, sizeof(sTemp)));
       sprintf(sTemp, "%ld", packet.UnpackUnsignedLong());
       u->SetZipCode(sTemp);
 
@@ -1195,10 +1195,10 @@
       packet >> nUin;
       CSearchAck *s = new CSearchAck(nUin);
 
-      s->m_szAlias = strdup(packet.UnpackString(szTemp));
-      s->m_szFirstName = strdup(packet.UnpackString(szTemp));
-      s->m_szLastName = strdup(packet.UnpackString(szTemp));
-      s->m_szEmail = strdup(packet.UnpackString(szTemp));
+      s->m_szAlias = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szFirstName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szLastName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szEmail = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
 
       // translating string with Translation Table
       gTranslator.ServerToClient(s->m_szAlias);
@@ -1987,10 +1987,10 @@
         {
           gLog.Info("%sBasic info on %s (%ld).\n", L_SBLANKxSTR, u->GetAlias(), 
u->Uin());
           u->SetEnableSave(false);
-          u->SetAlias(packet.UnpackString(szTemp));
-          u->SetFirstName(packet.UnpackString(szTemp));
-          u->SetLastName(packet.UnpackString(szTemp));
-          u->SetEmailPrimary(packet.UnpackString(szTemp));
+          u->SetAlias(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetFirstName(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetLastName(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetEmailPrimary(packet.UnpackString(szTemp, sizeof(szTemp)));
           // FIXME how does this packet end?
           //u->SetAuthorization(!packet.UnpackChar());
           //packet.UnpackChar(); // 02, what the?
@@ -2013,19 +2013,19 @@
         {
           gLog.Info("%sGeneral info on %s (%ld).\n", L_SBLANKxSTR, u->GetAlias(), 
u->Uin());
           u->SetEnableSave(false);
-          u->SetAlias(packet.UnpackString(szTemp));
-          u->SetFirstName(packet.UnpackString(szTemp));
-          u->SetLastName(packet.UnpackString(szTemp));
-          u->SetEmailPrimary(packet.UnpackString(szTemp));
-          u->SetEmailSecondary(packet.UnpackString(szTemp));
-          u->SetEmailOld(packet.UnpackString(szTemp));
-          u->SetCity(packet.UnpackString(szTemp));
-          u->SetState(packet.UnpackString(szTemp));
-          u->SetPhoneNumber(packet.UnpackString(szTemp));
-          u->SetFaxNumber(packet.UnpackString(szTemp));
-          u->SetAddress(packet.UnpackString(szTemp));
-          u->SetCellularNumber(packet.UnpackString(szTemp));
-          u->SetZipCode(packet.UnpackString(szTemp));
+          u->SetAlias(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetFirstName(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetLastName(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetEmailPrimary(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetEmailSecondary(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetEmailOld(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCity(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetState(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetPhoneNumber(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetFaxNumber(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetAddress(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCellularNumber(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetZipCode(packet.UnpackString(szTemp, sizeof(szTemp)));
           u->SetCountryCode(packet.UnpackUnsignedShort());
           u->SetTimezone(packet.UnpackChar());
           // FIXME how does this packet end?
@@ -2058,18 +2058,19 @@
         {
           gLog.Info("%sWork info on %s (%ld).\n", L_SBLANKxSTR, u->GetAlias(), 
u->Uin());
           u->SetEnableSave(false);
-          u->SetCompanyCity(packet.UnpackString(szTemp));
-          u->SetCompanyState(packet.UnpackString(szTemp));
-          u->SetCompanyPhoneNumber(packet.UnpackString(szTemp));
-          u->SetCompanyFaxNumber(packet.UnpackString(szTemp));
-          u->SetCompanyAddress(packet.UnpackString(szTemp));
-          packet.UnpackString(szTemp); // who knows..."256" typically
+          u->SetCompanyCity(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyState(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyPhoneNumber(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyFaxNumber(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyAddress(packet.UnpackString(szTemp, sizeof(szTemp)));
+          // who knows..."256" typically
+          packet.UnpackString(szTemp, sizeof(szTemp));
           packet.UnpackUnsignedShort(); // ??? 0x0000
-          u->SetCompanyName(packet.UnpackString(szTemp));
-          u->SetCompanyDepartment(packet.UnpackString(szTemp));
-          u->SetCompanyPosition(packet.UnpackString(szTemp));
+          u->SetCompanyName(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyDepartment(packet.UnpackString(szTemp, sizeof(szTemp)));
+          u->SetCompanyPosition(packet.UnpackString(szTemp, sizeof(szTemp)));
           packet.UnpackUnsignedShort(); // ?? 0x0004
-          u->SetCompanyHomepage(packet.UnpackString(szTemp));
+          u->SetCompanyHomepage(packet.UnpackString(szTemp, sizeof(szTemp)));
 
           // translating string with Translation Table
           gTranslator.ServerToClient(u->GetCompanyCity());
@@ -2094,7 +2095,7 @@
           u->SetEnableSave(false);
           u->SetAge(packet.UnpackUnsignedShort());
           u->SetGender(packet.UnpackChar());
-          u->SetHomepage(packet.UnpackString(szTemp));
+          u->SetHomepage(packet.UnpackString(szTemp, sizeof(szTemp)));
           u->SetBirthYear(packet.UnpackUnsignedShort());
           u->SetBirthMonth(packet.UnpackChar());
           u->SetBirthDay(packet.UnpackChar());
@@ -2114,7 +2115,7 @@
         case ICQ_CMDxMETA_ABOUT:
         {
           gLog.Info("%sAbout info on %s (%ld).\n", L_SBLANKxSTR, u->GetAlias(), 
u->Uin());
-          u->SetAbout(packet.UnpackString(szTemp));
+          u->SetAbout(packet.UnpackString(szTemp, sizeof(szTemp)));
           gTranslator.ServerToClient(u->GetAbout());
           PushPluginSignal(new CICQSignal(SIGNAL_UPDATExUSER,
                                           USER_ABOUT, nUin));
@@ -2285,10 +2286,10 @@
       CSearchAck *s = new CSearchAck(nUin);
 
       // Get the data out of the packet
-      s->m_szAlias = strdup(packet.UnpackString(szTemp));
-      s->m_szFirstName = strdup(packet.UnpackString(szTemp));
-      s->m_szLastName = strdup(packet.UnpackString(szTemp));
-      s->m_szEmail = strdup(packet.UnpackString(szTemp));
+      s->m_szAlias = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szFirstName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szLastName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szEmail = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
 
       // Translating string with Translation Table
       gTranslator.ServerToClient(s->m_szAlias);
@@ -2355,10 +2356,10 @@
       CSearchAck *s = new CSearchAck(nUin);
 
       // Get the data out of the packet
-      s->m_szAlias = strdup(packet.UnpackString(szTemp));
-      s->m_szFirstName = strdup(packet.UnpackString(szTemp));
-      s->m_szLastName = strdup(packet.UnpackString(szTemp));
-      s->m_szEmail = strdup(packet.UnpackString(szTemp));
+      s->m_szAlias = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szFirstName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szLastName = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
+      s->m_szEmail = strdup(packet.UnpackString(szTemp, sizeof(szTemp)));
 
       // Translating string with Translation Table
       gTranslator.ServerToClient(s->m_szAlias);


Reply via email to