diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2018-08-25 14:41:00 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2018-08-25 14:41:38 +0200 |
commit | 6922cae4aeaf1c4da6f602b559d8419a97a3faf2 (patch) | |
tree | 0806dfe34d5abd7f2dd0730e6971d5015dc82035 | |
parent | 8f43ec1e8326126e863bf6611ef68e2f01cd26a9 (diff) | |
parent | 6e1980e1520306cc5ec7109ccb3d7c8a0a672689 (diff) | |
download | php-git-6922cae4aeaf1c4da6f602b559d8419a97a3faf2.tar.gz |
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
Fix #55146: iconv_mime_decode_headers() skips some headers
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/iconv/iconv.c | 3 | ||||
-rw-r--r-- | ext/iconv/tests/bug55146.phpt | 36 |
3 files changed, 42 insertions, 0 deletions
@@ -15,6 +15,9 @@ PHP NEWS - gettext: . Fixed bug #76517 (incorrect restoring of LDFLAGS). (sji) +- iconv: + . Fixed bug #55146 (iconv_mime_decode_headers() skips some headers). (cmb) + - intl: . Fixed bug #74484 (MessageFormatter::formatMessage memory corruption with 11+ named placeholders). (Anatol) diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index ce4c9f4562..3af520deff 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1546,6 +1546,9 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st case 1: /* expecting a delimiter */ if (*p1 != '?') { + if (*p1 == '\r' || *p1 == '\n') { + --p1; + } err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl); if (err != PHP_ICONV_ERR_SUCCESS) { goto out; diff --git a/ext/iconv/tests/bug55146.phpt b/ext/iconv/tests/bug55146.phpt new file mode 100644 index 0000000000..b3c2015314 --- /dev/null +++ b/ext/iconv/tests/bug55146.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #55146 (iconv_mime_decode_headers() skips some headers) +--SKIPIF-- +<?php +if (!extension_loaded('iconv')) die('skip iconv extension not available'); +?> +--FILE-- +<?php + +$headers = <<< HEADERS +X-Header-One: H4sIAAAAAAAAA+NgFlsCAAA= +X-Header-Two: XtLePq6GTMn8G68F0 +HEADERS; +var_dump(iconv_mime_decode_headers($headers, ICONV_MIME_DECODE_CONTINUE_ON_ERROR)); + +$headers = <<< HEADERS +X-Header-One: = +X-Header-Two: XtLePq6GTMn8G68F0 +HEADERS; +var_dump(iconv_mime_decode_headers($headers, ICONV_MIME_DECODE_STRICT)); +?> +===DONE=== +--EXPECT-- +array(2) { + ["X-Header-One"]=> + string(24) "H4sIAAAAAAAAA+NgFlsCAAA=" + ["X-Header-Two"]=> + string(17) "XtLePq6GTMn8G68F0" +} +array(2) { + ["X-Header-One"]=> + string(1) "=" + ["X-Header-Two"]=> + string(17) "XtLePq6GTMn8G68F0" +} +===DONE=== |