]> git.llucax.com Git - software/mutt-debian.git/blobdiff - rfc822.c
patch to fix 533459
[software/mutt-debian.git] / rfc822.c
index 4500e67da915375ae3ce9e509384aeae917bd894..3a04bd4078e80752323f3f9d2ee8d3a639bfa73d 100644 (file)
--- a/rfc822.c
+++ b/rfc822.c
@@ -33,7 +33,7 @@
 #define FREE(x) safe_free(x)
 #define ISSPACE isspace
 #define strfcpy(a,b,c) {if (c) {strncpy(a,b,c);a[c-1]=0;}}
 #define FREE(x) safe_free(x)
 #define ISSPACE isspace
 #define strfcpy(a,b,c) {if (c) {strncpy(a,b,c);a[c-1]=0;}}
-#define STRING 128
+#define LONG_STRING 1024
 #include "rfc822.h"
 #endif
 
 #include "rfc822.h"
 #endif
 
@@ -60,7 +60,7 @@ const char *RFC822Errors[] = {
   "bad address spec"
 };
 
   "bad address spec"
 };
 
-void rfc822_dequote_comment (char *s)
+static void rfc822_dequote_comment (char *s)
 {
   char *w = s;
 
 {
   char *w = s;
 
@@ -256,7 +256,7 @@ parse_route_addr (const char *s,
                  char *comment, size_t *commentlen, size_t commentmax,
                  ADDRESS *addr)
 {
                  char *comment, size_t *commentlen, size_t commentmax,
                  ADDRESS *addr)
 {
-  char token[STRING];
+  char token[LONG_STRING];
   size_t tokenlen = 0;
 
   SKIPWS (s);
   size_t tokenlen = 0;
 
   SKIPWS (s);
@@ -304,7 +304,7 @@ parse_addr_spec (const char *s,
                 char *comment, size_t *commentlen, size_t commentmax,
                 ADDRESS *addr)
 {
                 char *comment, size_t *commentlen, size_t commentmax,
                 ADDRESS *addr)
 {
-  char token[STRING];
+  char token[LONG_STRING];
   size_t tokenlen = 0;
 
   s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr);
   size_t tokenlen = 0;
 
   s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr);
@@ -339,7 +339,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s)
 {
   int ws_pending, nl;
   const char *begin, *ps;
 {
   int ws_pending, nl;
   const char *begin, *ps;
-  char comment[STRING], phrase[STRING];
+  char comment[LONG_STRING], phrase[LONG_STRING];
   size_t phraselen = 0, commentlen = 0;
   ADDRESS *cur, *last = NULL;
   
   size_t phraselen = 0, commentlen = 0;
   ADDRESS *cur, *last = NULL;
   
@@ -594,8 +594,6 @@ void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS *addr,
       {
        if (*pc == '"' || *pc == '\\')
        {
       {
        if (*pc == '"' || *pc == '\\')
        {
-         if (!buflen)
-           goto done;
          *pbuf++ = '\\';
          buflen--;
        }
          *pbuf++ = '\\';
          buflen--;
        }
@@ -759,12 +757,17 @@ ADDRESS *rfc822_cpy_adr_real (ADDRESS *addr)
 }
 
 /* this should be rfc822_cpy_adrlist */
 }
 
 /* this should be rfc822_cpy_adrlist */
-ADDRESS *rfc822_cpy_adr (ADDRESS *addr)
+ADDRESS *rfc822_cpy_adr (ADDRESS *addr, int prune)
 {
   ADDRESS *top = NULL, *last = NULL;
   
   for (; addr; addr = addr->next)
   {
 {
   ADDRESS *top = NULL, *last = NULL;
   
   for (; addr; addr = addr->next)
   {
+    if (prune && addr->group && (!addr->next || !addr->next->mailbox))
+    {
+      addr = addr->next;
+      continue;
+    }
     if (last)
     {
       last->next = rfc822_cpy_adr_real (addr);
     if (last)
     {
       last->next = rfc822_cpy_adr_real (addr);
@@ -777,7 +780,7 @@ ADDRESS *rfc822_cpy_adr (ADDRESS *addr)
 }
 
 /* append list 'b' to list 'a' and return the last element in the new list */
 }
 
 /* append list 'b' to list 'a' and return the last element in the new list */
-ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b)
+ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b, int prune)
 {
   ADDRESS *tmp = *a;
 
 {
   ADDRESS *tmp = *a;
 
@@ -786,9 +789,9 @@ ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b)
   if (!b)
     return tmp;
   if (tmp)
   if (!b)
     return tmp;
   if (tmp)
-    tmp->next = rfc822_cpy_adr (b);
+    tmp->next = rfc822_cpy_adr (b, prune);
   else
   else
-    tmp = *a = rfc822_cpy_adr (b);
+    tmp = *a = rfc822_cpy_adr (b, prune);
   while (tmp && tmp->next)
     tmp = tmp->next;
   return tmp;
   while (tmp && tmp->next)
     tmp = tmp->next;
   return tmp;
@@ -818,7 +821,6 @@ int rfc822_valid_msgid (const char *msgid)
    * domain-literal = "[" *(dtext / quoted-pair) "]"
    */
 
    * domain-literal = "[" *(dtext / quoted-pair) "]"
    */
 
-  char* dom;
   unsigned int l, i;
 
   if (!msgid || !*msgid)
   unsigned int l, i;
 
   if (!msgid || !*msgid)
@@ -829,7 +831,7 @@ int rfc822_valid_msgid (const char *msgid)
     return -1;
   if (msgid[0] != '<' || msgid[l-1] != '>')
     return -1;
     return -1;
   if (msgid[0] != '<' || msgid[l-1] != '>')
     return -1;
-  if (!(dom = strrchr (msgid, '@')))
+  if (!(strrchr (msgid, '@')))
     return -1;
 
   /* TODO: complete parser */
     return -1;
 
   /* TODO: complete parser */