From a56cdd0a824d439920548aaeae757cb2341bd4ec Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 14 Nov 2018 14:55:38 +0100 Subject: Fix #77147: Fix for 60494 ignores ICONV_MIME_DECODE_CONTINUE_ON_ERROR If the `ICONV_MIME_DECODE_CONTINUE_ON_ERROR` flag is set, parsing should not fail, if there are illegal characters in the headers; instead we silently ignore these like before. --- NEWS | 4 ++++ ext/iconv/iconv.c | 6 +++++- ext/iconv/tests/bug77147.phpt | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 ext/iconv/tests/bug77147.phpt diff --git a/NEWS b/NEWS index f6ae98fe7b..dbb7c1fff9 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2018, PHP 7.1.25 +- iconv: + . Fixed bug #77147 (Fixing 60494 ignored ICONV_MIME_DECODE_CONTINUE_ON_ERROR). + (cmb) + - ODBC: . Fixed bug #77079 (odbc_fetch_object has incorrect type signature). (Jon Allen) diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index ef27b20645..f86d0ae031 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1546,7 +1546,11 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st default: /* first letter of a non-encoded word */ err = _php_iconv_appendc(pretval, *p1, cd_pl); if (err != PHP_ICONV_ERR_SUCCESS) { - goto out; + if (mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR) { + err = PHP_ICONV_ERR_SUCCESS; + } else { + goto out; + } } encoded_word = NULL; if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) { diff --git a/ext/iconv/tests/bug77147.phpt b/ext/iconv/tests/bug77147.phpt new file mode 100644 index 0000000000..839f8972e3 --- /dev/null +++ b/ext/iconv/tests/bug77147.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #77147 (Fixing 60494 ignored ICONV_MIME_DECODE_CONTINUE_ON_ERROR) +--SKIPIF-- + +--FILE-- + +===DONE=== +--EXPECT-- +array(1) { + ["Feedback-ID"]=> + string(86) "014a93e3-1f5e-4df6-b347-6b59f0f746b8:b5891053-55d1-45bc-a0b5-47a7a9b59687:email:epslh1" +} +===DONE=== -- cgit v1.2.1