]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/stringbuf.c
* StrBufSanitizeEmailRecipientVector() fix bug cutting one of the email address
[citadel.git] / libcitadel / lib / stringbuf.c
index 861c1d2f991b10e06c42a4b17bf0b43fae67db83..fcbd1daa74b8091d7a202637b03745f29cc0b739 100644 (file)
@@ -2259,6 +2259,7 @@ int StrBufDecodeBase64(StrBuf *Buf)
        if (Buf == NULL) return -1;
 
        xferbuf = (char*) malloc(Buf->BufSize);
+       *xferbuf = '\0';
        siz = CtdlDecodeBase64(xferbuf,
                               Buf->buf,
                               Buf->BufUsed);
@@ -2546,14 +2547,15 @@ StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp,
                        else {
 
                                pch = EmailEnd + 1;
-                               while ((EmailEnd > UserStart) && 
+                               while ((EmailEnd > UserStart) && !gt &&
                                       ((*EmailEnd == ',') ||
                                        (*EmailEnd == '>') ||
                                        (isspace(*EmailEnd))))
                                {
                                        if (*EmailEnd == '>')
                                                gt = 1;
-                                       EmailEnd--;
+                                       else 
+                                               EmailEnd--;
                                }
                                if (EmailEnd == UserStart)
                                        break;
@@ -2582,19 +2584,24 @@ StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp,
                        }
                }
 
-
-               if (UserStart != NULL)
+               if ((UserStart != NULL) && (UserEnd != NULL))
+                       StrBufPlain(UserName, UserStart, UserEnd - UserStart);
+               else if ((UserStart != NULL) && (UserEnd == NULL))
                        StrBufPlain(UserName, UserStart, UserEnd - UserStart);
                else
                        FlushStrBuf(UserName);
-               if (EmailStart != NULL)
+
+               if ((EmailStart != NULL) && (EmailEnd != NULL))
                        StrBufPlain(EmailAddress, EmailStart, EmailEnd - EmailStart);
+               else if ((EmailStart != NULL) && (EmailEnd == NULL))
+                       StrBufPlain(EmailAddress, EmailStart, EmailEnd - pche);
                else 
                        FlushStrBuf(EmailAddress);
 
                AddRecipient(Target, UserName, EmailAddress, EncBuf);
 
-
+               if (pch == NULL)
+                       break;
                
                if ((pch != NULL) && (*pch == ','))
                        pch ++;