bug-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-mailutils] [Bug-mailfromd] Sometime wrongly padded base64 when


From: Sergey Poznyakoff
Subject: Re: [bug-mailutils] [Bug-mailfromd] Sometime wrongly padded base64 when doing message_header_encode?
Date: Tue, 23 Jun 2015 08:06:45 +0300

Hi Christian,

> I am sorry to be such a pain in (ab)using this mailing-list a lot ...

Quite on the contrary: thank you for discovering a bug in Mailutils!

> I am observing some apparently wrongly padded base64 strings using the
> function message_header_encode to prepare a subject header.

The bug is in libmailutils function filter_read.  Please apply the
attached patch to Mailutils source, then reinstall libmailutils
(make -C libmailutils install), and recompile mailfromd.

Regards,
Sergey

>From db61713bca989ff30c8b37f4c1155c65ce652016 Mon Sep 17 00:00:00 2001
From: Sergey Poznyakoff <address@hidden>
Date: Tue, 23 Jun 2015 07:56:11 +0300
Subject: [PATCH] Fix improper padding in B encoding

* libmailutils/stream/fltstream.c: stop encoding when no more
input is available.
* libmailutils/tests/encode2047.at: add new tests.
* libmailutils/filter/base64.c (_base64_encoder): detect eof
---
 libmailutils/filter/base64.c     |  7 +++++++
 libmailutils/stream/fltstream.c  |  2 +-
 libmailutils/tests/encode2047.at | 45 ++++++++++++++++++++++++++++++----------
 3 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/libmailutils/filter/base64.c b/libmailutils/filter/base64.c
index de145b2..77769d2 100644
--- a/libmailutils/filter/base64.c
+++ b/libmailutils/filter/base64.c
@@ -232,6 +232,13 @@ _base64_encoder (void *xd,
     default:
       break;
     }
+
+  if (iobuf->isize == 0)
+    {
+      iobuf->osize = 0;
+      iobuf->eof = 1;
+      return mu_filter_ok;
+    }

   if (iobuf->isize <= 3)
     {
diff --git a/libmailutils/stream/fltstream.c b/libmailutils/stream/fltstream.c
index 041ea39..d4fabff 100644
--- a/libmailutils/stream/fltstream.c
+++ b/libmailutils/stream/fltstream.c
@@ -149,7 +149,7 @@ filter_read (mu_stream_t stream, char *buf, size_t size, 
size_t *pret)
              if (rdsize == 0 &&
                  MFB_RDBYTES (fs->outbuf) == 0 &&
                  MFB_RDBYTES (fs->inbuf) == 0)
-               cmd = mu_filter_lastbuf;
+               break;

              MFB_advance_level (&fs->inbuf, rdsize);
            }
diff --git a/libmailutils/tests/encode2047.at b/libmailutils/tests/encode2047.at
index 2dbd830..1ab2729 100644
--- a/libmailutils/tests/encode2047.at
+++ b/libmailutils/tests/encode2047.at
@@ -14,18 +14,41 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.

-AT_SETUP([encode2047])
-AT_KEYWORDS([encode])
-
-AT_CHECK([
-AT_DATA(input,[dnl
-\\345\326\305\304\316\305\327\316\331\312\040\317\324\336\305\324
+dnl ------------------------------------------------------------
+dnl TESTENC2047([NAME], [KW = `'], [OPT], [INPUT], [STDOUT = `'])
+dnl
+m4_pushdef([TESTENC2047],[
+m4_pushdef([MU_TEST_GROUP],[Encode 2047])
+m4_pushdef([MU_TEST_KEYWORDS],[encode2047 encode])
+m4_pushdef([MU_TEST_COMMAND],[encode2047 -eB $3])
+MU_GENERIC_TEST([$1],[$2],[$4],[],[$5
 ])
-
-encode2047 -c koi8-r -eB -o < input],
-[0],
-[=?koi8-r?B?5dbFxM7F187ZyiDP1N7F1A==?=
+m4_popdef([MU_TEST_COMMAND])
+m4_popdef([MU_TEST_KEYWORDS])
+m4_popdef([MU_TEST_GROUP])
 ])

-AT_CLEANUP
+TESTENC2047([8-bit input],[enc01],
+            [-c koi8-r -o],
+            
[\\345\326\305\304\316\305\327\316\331\312\040\317\324\336\305\324],
+            [=?koi8-r?B?5dbFxM7F187ZyiDP1N7F1A==?=])
+
+TESTENC2047([padding 1],[enc02],
+            [],
+            [abcd],
+           [=?iso-8859-1?B?YWJjZA==?=])
+
+TESTENC2047([padding 2],[enc03],
+            [],
+            [abcdef],
+           [=?iso-8859-1?B?YWJjZGVm?=])
+
+TESTENC2047([padding 3],[enc04],
+            [-cUTF-8],
+           [Wichtige Mitteilung zur Schaltung Ihres Anschlusses],
+           
[=?UTF-8?B?V2ljaHRpZ2UgTWl0dGVpbHVuZyB6dXIgU2NoYWx0dW5nIElocmVzIEFuc2NobHVzc2Vz?=])
+
+
+m4_popdef([TESTENC2047])
+

--
1.7.12.1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]