X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpick.c;h=8ae58a464eb2a5a27126931ca215d1a4a55936cb;hb=8268f67015f9659a2f63dc26702a5a49d3fa6c2a;hp=b3bac286f221a357e0fca813202cbd7d177edf25;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa;p=mmh diff --git a/uip/pick.c b/uip/pick.c index b3bac28..8ae58a4 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -381,6 +381,7 @@ static struct swit parswit[] = { static char linebuf[LBSIZE + 1]; +static char decoded_linebuf[LBSIZE + 1]; /* the magic array for case-independence */ static char cc[] = { @@ -768,7 +769,7 @@ newnexus(int (*action)()) { struct nexus *p; - if ((p = (struct nexus *) calloc((size_t) 1, sizeof *p)) == NULL) + if ((p = (struct nexus *) mh_xcalloc((size_t) 1, sizeof *p)) == NULL) adios(EX_OSERR, NULL, "unable to allocate component storage"); p->n_action = action; @@ -1016,8 +1017,17 @@ 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)) + if (advance(p1, p2)) return 1; continue; }