From f16ae6eedeacce086d513e10461938c1650e265e Mon Sep 17 00:00:00 2001 From: David Levine Date: Sun, 25 Nov 2012 09:06:20 -0600 Subject: [PATCH] pick(1) decode rfc2047-fields Attempt to decode each header field as if it were MIME encoded. --- test/tests/pick/test-rfc2047 | 32 ++++++++++++++++++++++++++++++++ uip/pick.c | 8 ++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/tests/pick/test-rfc2047 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; -- 1.7.10.4