In pick(1), attempt to decode each header field as if it were
[mmh] / uip / picksbr.c
index 4073919..91893e3 100644 (file)
@@ -78,6 +78,7 @@ static struct swit parswit[] = {
 
 
 static char linebuf[LBSIZE + 1];
+static char decoded_linebuf[LBSIZE + 1];
 
 /* the magic array for case-independence */
 static unsigned char cc[] = {
@@ -701,7 +702,8 @@ plist
                        break;
                    }
                    lf++;
-                   c = ' ';
+                   /* Unfold by skipping the newline. */
+                   c = 0;
                }
            }
            if (c && p1 < &linebuf[LBSIZE - 1])
@@ -713,6 +715,13 @@ plist
        p1 = linebuf;
        p2 = n->n_expbuf;
 
+       /* Attempt to decode as a MIME header.  If it's the last header,
+          body will be 1 and lf will be at least 1. */
+       if ((body == 0 || lf > 0)  &&
+           decode_rfc2047 (linebuf, decoded_linebuf, sizeof decoded_linebuf)) {
+           p1 = decoded_linebuf;
+       }
+
        if (n->n_circf) {
            if (advance (p1, p2))
                return 1;