summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-08-25 15:41:44 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2018-08-25 17:40:39 +0200
commite29c946c29afdb0bf89c5329fcf3038448d50e17 (patch)
tree3cc4822feee7d157a591245010f0d5d7664315d6
parent8754d44167d95a381c9c60beeb26492f4176fe1c (diff)
downloadphp-git-e29c946c29afdb0bf89c5329fcf3038448d50e17.tar.gz
Fix #60494: iconv_mime_decode does ignore special characters
We must not ignore erroneous characters in mime headers, but rather let iconv_mime_decode() fail in this case, issuing the usual notice regarding illegal characters.
-rw-r--r--NEWS1
-rw-r--r--ext/iconv/iconv.c5
-rw-r--r--ext/iconv/tests/bug60494.phpt23
3 files changed, 28 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 69087d12d8..08f0fae425 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,7 @@ PHP NEWS
- iconv:
. Fixed bug #63839 (iconv_mime_decode_headers function is skipping headers).
(cmb)
+ . Fixed bug #60494 (iconv_mime_decode does ignore special characters). (cmb)
. Fixed bug #55146 (iconv_mime_decode_headers() skips some headers). (cmb)
- intl:
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index dd56ebadca..d759596d65 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -1544,7 +1544,10 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
break;
default: /* first letter of a non-encoded word */
- _php_iconv_appendc(pretval, *p1, cd_pl);
+ err = _php_iconv_appendc(pretval, *p1, cd_pl);
+ if (err != PHP_ICONV_ERR_SUCCESS) {
+ goto out;
+ }
encoded_word = NULL;
if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
scan_stat = 12;
diff --git a/ext/iconv/tests/bug60494.phpt b/ext/iconv/tests/bug60494.phpt
new file mode 100644
index 0000000000..5c658af56b
--- /dev/null
+++ b/ext/iconv/tests/bug60494.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #60494 (iconv_mime_decode does ignore special characters)
+--SKIPIF--
+<?php
+if (!extension_loaded('iconv')) die('skip iconv extension not available');
+?>
+--FILE--
+<?php
+var_dump(iconv_mime_decode('ä'));
+var_dump(iconv_mime_decode('ö'));
+var_dump(iconv_mime_decode('ß'));
+?>
+===DONE===
+--EXPECTF--
+Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
+bool(false)
+
+Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
+bool(false)
+
+Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
+bool(false)
+===DONE===