summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-11-14 14:55:38 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2018-11-14 14:55:38 +0100
commita56cdd0a824d439920548aaeae757cb2341bd4ec (patch)
tree4ac36623620645f237243948a7f6903b84df10cc
parentec2e7a2d480cfe51e5a234354a50bb4c85fae155 (diff)
downloadphp-git-a56cdd0a824d439920548aaeae757cb2341bd4ec.tar.gz
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.
-rw-r--r--NEWS4
-rw-r--r--ext/iconv/iconv.c6
-rw-r--r--ext/iconv/tests/bug77147.phpt21
3 files changed, 30 insertions, 1 deletions
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--
+<?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===