From: David Levine Date: Sun, 25 Nov 2012 15:06:20 +0000 (-0600) Subject: pick(1) decode rfc2047-fields X-Git-Tag: mmh-0.2-RC1~14^2~9 X-Git-Url: http://git.marmaro.de/?p=mmh;a=commitdiff_plain;h=f16ae6eedeacce086d513e10461938c1650e265e;ds=sidebyside pick(1) decode rfc2047-fields Attempt to decode each header field as if it were MIME encoded. --- diff --git a/test/tests/pick/test-rfc2047 b/test/tests/pick/test-rfc2047 new file mode 100644 index 0000000..b89a71a --- /dev/null +++ b/test/tests/pick/test-rfc2047 @@ -0,0 +1,32 @@ +#!/bin/sh +###################################################### +# +# Test pick parse rfc2047-header +# +###################################################### + +set -e + +expected_err=$MH_TEST_DIR/$$.expected_err +expected_out=$MH_TEST_DIR/$$.expected_out +actual_err=$MH_TEST_DIR/$$.actual_err +actual_out=$MH_TEST_DIR/$$.actual_out + +# Test MIME-encoded header. +cat >"$MH_TEST_DIR/Mail/inbox/13" < +To: Some User +Date: Fri, 29 Sep 2006 00:00:00 +Message-Id: 13@test.nmh +Subject: =?us-ascii?q?=66=6f=6f?= + =?utf-8?q?=62=61=72?= + +This is message number 13, with MIME-encoded Subject "foobar". +EOF + +echo 13 >"$expected_out" +cat /dev/null > $expected_err + +pick -subject foobar 13 > $actual_out 2> $actual_err +diff -u $expected_err $actual_err +diff -u $expected_out $actual_out diff --git a/uip/pick.c b/uip/pick.c index 819d81a..8448d96 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[] = { @@ -1016,6 +1017,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;