]> code.citadel.org Git - citadel.git/commitdiff
* fix buffer handling in qp_encode_email_addrs()
authorWilfried Göesgens <willi@citadel.org>
Tue, 17 Jun 2008 21:34:26 +0000 (21:34 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 17 Jun 2008 21:34:26 +0000 (21:34 +0000)
citadel/msgbase.c

index 8e2a8228efb6613c26224b0671ae9bd95f7e55a8..b01505b2b6d9f39e023f884478cb44179d2b1064 100644 (file)
@@ -1479,14 +1479,17 @@ char *qp_encode_email_addrs(char *source)
        *AddrPtr = 0;
        i = 0;
        while (!IsEmptyStr (&source[i])) {
-               if (nColons > nAddrPtrMax){
+               if (nColons >= nAddrPtrMax){
                        long *ptr;
 
                        ptr = (long *) malloc(sizeof (long) * nAddrPtrMax * 2);
                        memcpy (ptr, AddrPtr, sizeof (long) * nAddrPtrMax);
                        free (AddrPtr), AddrPtr = ptr;
+
                        ptr = (long *) malloc(sizeof (long) * nAddrPtrMax * 2);
-                       memset(ptr + sizeof (long) * nAddrPtrMax, 0, sizeof (long) * nAddrPtrMax - 1);
+                       memset(&ptr[nAddrPtrMax], 0, 
+                              sizeof (long) * nAddrPtrMax);
+
                        memcpy (ptr, AddrUtf8, sizeof (long) * nAddrPtrMax);
                        free (AddrUtf8), AddrUtf8 = ptr;
                        nAddrPtrMax *= 2;                               
@@ -1499,8 +1502,8 @@ char *qp_encode_email_addrs(char *source)
                if (source[i] == '"')
                        InQuotes = !InQuotes;
                if (!InQuotes && source[i] == ',') {
-                       nColons++;
                        AddrPtr[nColons] = i;
+                       nColons++;
                }
                i++;
        }