jstedfast / gmime

A C/C++ MIME creation and parser library with support for S/MIME, PGP, and Unix mbox spools.
GNU Lesser General Public License v2.1
115 stars 36 forks source link

Wrong decoding of consecutive B-encoded words #133

Closed jwilk closed 1 year ago

jwilk commented 1 year ago

gmime fails to correctly to decode headers such as:

Subject: =?UTF-8?B?SGVsbG8=?= =?UTF-8?B?IHdvcmxk?=

To reproduce, apply

--- a/tests/test-mime.c
+++ b/tests/test-mime.c
@@ -434,6 +434,10 @@ static struct {
    { "=?iso-8859-1?q?Jobbans=F6kan?= - duktig =?iso-8859-1?q?researcher=2Fomv=E4rldsbevakare=2Fomv=E4rldsan?= =?us-ascii?q?alytiker?=",
      "Jobbansökan - duktig researcher/omvärldsbevakare/omvärldsanalytiker",
      "=?iso-8859-1?q?Jobbans=F6kan?= - duktig =?iso-8859-1?q?researcher=2Fomv=E4rldsbevakare=2Fomv=E4rldsana?= =?us-ascii?q?lytiker?=" },
+   { "=?UTF-8?B?SGVsbG8=?= =?UTF-8?B?IHdvcmxk?=",
+     "Hello world",
+     "Hello world"},
+
 };

 static struct {

and run:

$ tests/test-mime -vvv > /dev/null
rfc2047_text[8]: decoded text does not match: actual="Hello", expected="Hello world"
rfc2047_text[8]: decoded text does not match: actual="Hello", expected="Hello world"

git bisect told me the first bad commit was 00cefe74f66823a4e0ed81bf5b133622817caf4a ("Improved base64 decoder performance by ~10%").

(This was originally repored at https://nmbug.notmuchmail.org/nmweb/show/87wn9w4xus.fsf%40thb.lt.)