summaryrefslogtreecommitdiff
path: root/ext/iconv
diff options
context:
space:
mode:
Diffstat (limited to 'ext/iconv')
-rw-r--r--ext/iconv/iconv.c5
-rw-r--r--ext/iconv/tests/bug60494.phpt23
2 files changed, 27 insertions, 1 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 70929e0563..43c2798122 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -1534,7 +1534,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===