Index: bogofilter/AUTHORS =================================================================== --- bogofilter/AUTHORS (revision 7015) +++ bogofilter/AUTHORS (revision 7016) @@ -55,3 +55,4 @@ Marco Bozzolan Paul Mangan Roman Trunov +Julius Plenz Index: bogofilter/src/tests/inputs/t.passthrough-truncation-in.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bogofilter/src/tests/inputs/t.passthrough-truncation-in.gz =================================================================== --- bogofilter/src/tests/inputs/t.passthrough-truncation-in.gz (nonexistent) +++ bogofilter/src/tests/inputs/t.passthrough-truncation-in.gz (revision 7016) Property changes on: bogofilter/src/tests/inputs/t.passthrough-truncation-in.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bogofilter/src/tests/t.passthrough-truncation =================================================================== --- bogofilter/src/tests/t.passthrough-truncation (nonexistent) +++ bogofilter/src/tests/t.passthrough-truncation (revision 7016) @@ -0,0 +1,19 @@ +#! /bin/sh + +. ${srcdir:=.}/t.frame + +# t.passthrough-hb +# +# test for correct passthrough of misdeclared MIME parts +# test case provided by Julius Plenz, July 2014. + +gzip -c -d <"$srcdir/inputs/t.passthrough-truncation-in.gz" >"$TMPDIR/input" +$BOGOFILTER -e -p -C < "$TMPDIR/input" \ +| $GREP -v "^X-Bogosity: Unsure," > "$TMPDIR/output" + +if [ $verbose -eq 0 ]; then + cmp "$TMPDIR/input" "$TMPDIR/output" +else + set +e + diff $DIFF_BRIEF "$TMPDIR/input" "$TMPDIR/output" +fi Property changes on: bogofilter/src/tests/t.passthrough-truncation ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: bogofilter/src/tests/Makefile.am =================================================================== --- bogofilter/src/tests/Makefile.am (revision 7015) +++ bogofilter/src/tests/Makefile.am (revision 7016) @@ -35,7 +35,7 @@ t.ignore_spam_header \ t.nullstatsprefix \ t.integrity t.integrity2 t.integrity3 \ - t.passthrough-hb \ + t.passthrough-hb t.passthrough-truncation \ t.escaped.html t.escaped.url \ t.base64 t.split t.parsing \ t.lexer t.lexer.mbx t.lexer.qpcr t.lexer.eoh \ @@ -97,6 +97,7 @@ inputs/msg.split.dr.0118.base64 \ inputs/msg.split.gs.0119.text \ inputs/spam.mbx \ + inputs/t.passthrough-truncation-in.gz \ outputs/MH.out \ outputs/bogolex.out \ outputs/bulkmode.out \ Index: bogofilter/src/lexer.c =================================================================== --- bogofilter/src/lexer.c (revision 7015) +++ bogofilter/src/lexer.c (revision 7016) @@ -220,15 +220,25 @@ #ifndef DISABLE_UNICODE if (encoding == E_UNICODE && - !msg_state->mime_dont_decode) + !msg_state->mime_dont_decode && + count > 0) { iconvert(linebuff, buff); + + /* If we return count = 0 here, the caller will think we have + * no more bytes left to read, even though before the iconvert + * call we had a positive number of bytes. This *will* lead to + * a message truncation which we try to avoid by simply + * returning the original input buffer (which has positive + * length) instead. */ + if(buff->t.leng == 0) + memcpy(buff, linebuff, sizeof(*buff)); + /* * iconvert, treating multi-byte sequences, can shrink or enlarge * the output compared to its input. Correct count. */ - if (count > 0) - count = buff->t.leng; + count = buff->t.leng; } #endif Index: bogofilter/NEWS =================================================================== --- bogofilter/NEWS (revision 7015) +++ bogofilter/NEWS (revision 7016) @@ -15,6 +15,13 @@ ------------------------------------------------------------------------------- + 2014-07-10 + + * Take patch from Julius Plenz to fix a bug in the charset converter + that causes truncation of messages in pass-through mode in rare + circumstances, for instance, if binary data is misdeclared as + text/html. Also add his test case, t.passthrough-truncation. + 2013-11-30 * Updated autoconf/automake stuff so that tests work properly with