X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/706236baa4c4670b5a074092dec5dec63ff50663..037daf5b680717070873b637079db3cbb426d17a:/uip/picksbr.c diff --git a/uip/picksbr.c b/uip/picksbr.c index 4895b237..d03e72be 100644 --- a/uip/picksbr.c +++ b/uip/picksbr.c @@ -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[] = { @@ -714,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; @@ -939,7 +947,8 @@ plist fseek (fp, start, SEEK_SET); for (state = FLD, bp = NULL;;) { - switch (state = m_getfld (state, name, buf, sizeof buf, fp)) { + int bufsz = sizeof buf; + switch (state = m_getfld (state, name, buf, &bufsz, fp)) { case FLD: case FLDEOF: case FLDPLUS: @@ -947,7 +956,8 @@ plist free (bp), bp = NULL; bp = add (buf, NULL); while (state == FLDPLUS) { - state = m_getfld (state, name, buf, sizeof buf, fp); + bufsz = sizeof buf; + state = m_getfld (state, name, buf, &bufsz, fp); bp = add (buf, bp); } if (!mh_strcasecmp (name, n->n_datef))