summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-11-14 14:59:56 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2018-11-14 14:59:56 +0100
commit22889c94d1666646002ff67b5464fa276e1af7f4 (patch)
tree8c483163e2097689cbf0882756970ee67fea1423
parentf6d227ed4f5d4c0276eb720806e808baceb37f10 (diff)
parent9a2bd2f4530412f04dbb86becf9783eb5335be7a (diff)
downloadphp-git-22889c94d1666646002ff67b5464fa276e1af7f4.tar.gz
Merge branch 'PHP-7.3'
* PHP-7.3: Fix #77147: Fix for 60494 ignores ICONV_MIME_DECODE_CONTINUE_ON_ERROR
-rw-r--r--ext/iconv/iconv.c6
-rw-r--r--ext/iconv/tests/bug77147.phpt21
2 files changed, 26 insertions, 1 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index aab933452f..fbf2590cad 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -1533,7 +1533,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===