diff options
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/iconv/iconv.c | 6 | ||||
-rw-r--r-- | ext/iconv/tests/bug77147.phpt | 21 |
3 files changed, 30 insertions, 1 deletions
@@ -6,6 +6,10 @@ PHP NEWS . Fixed bug #77095 (slowness regression in 7.2/7.3 (compared to 7.1)). (Anatol) +- 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 19df4e0179..a92395e25f 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1537,7 +1537,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-- +<?php +if (!extension_loaded('iconv')) die('skip iconv extension not available'); +?> +--FILE-- +<?php +$string = <<<EOF +Feedback-ID: 014a93e3-1f5e-4df6-b347-6b59f0f746b8:b5891053-55d1-45bc-a0b5-47a7a9b59687:email:epslh1� +EOF; +$headers = iconv_mime_decode_headers($string, ICONV_MIME_DECODE_CONTINUE_ON_ERROR); +var_dump($headers); +?> +===DONE=== +--EXPECT-- +array(1) { + ["Feedback-ID"]=> + string(86) "014a93e3-1f5e-4df6-b347-6b59f0f746b8:b5891053-55d1-45bc-a0b5-47a7a9b59687:email:epslh1" +} +===DONE=== |