[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
- Re: [bug-mailutils] [Bug-mailfromd] Sometime wrongly padded base64 when doing message_header_encode?,
Sergey Poznyakoff <=