summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-08-25 14:51:47 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2018-08-25 14:52:54 +0200
commit7e176ddb57ec41751185e761ee19c42697e65543 (patch)
treeb12af60e465ab49821c0847df6fb2e5baa2d042e
parent6922cae4aeaf1c4da6f602b559d8419a97a3faf2 (diff)
parent8754d44167d95a381c9c60beeb26492f4176fe1c (diff)
downloadphp-git-7e176ddb57ec41751185e761ee19c42697e65543.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fix #63839: iconv_mime_decode_headers function is skipping headers
-rw-r--r--NEWS2
-rw-r--r--ext/iconv/iconv.c17
-rw-r--r--ext/iconv/tests/bug63839.phpt71
3 files changed, 90 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index b7ab3a4d6e..eabade2582 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,8 @@ PHP NEWS
. Fixed bug #76517 (incorrect restoring of LDFLAGS). (sji)
- iconv:
+ . Fixed bug #63839 (iconv_mime_decode_headers function is skipping headers).
+ (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 3af520deff..d60d2151d6 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -1574,6 +1574,23 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
case '*': /* new style delimiter: locale id follows */
scan_stat = 10;
break;
+
+ case '\r': case '\n': /* not an encoded-word */
+ --p1;
+ _php_iconv_appendc(pretval, '=', cd_pl);
+ _php_iconv_appendc(pretval, '?', cd_pl);
+ err = _php_iconv_appendl(pretval, csname, (size_t)((p1 + 1) - csname), cd_pl);
+ if (err != PHP_ICONV_ERR_SUCCESS) {
+ goto out;
+ }
+ csname = NULL;
+ if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
+ scan_stat = 12;
+ }
+ else {
+ scan_stat = 0;
+ }
+ continue;
}
if (scan_stat != 2) {
char tmpbuf[80];
diff --git a/ext/iconv/tests/bug63839.phpt b/ext/iconv/tests/bug63839.phpt
new file mode 100644
index 0000000000..22f601ee59
--- /dev/null
+++ b/ext/iconv/tests/bug63839.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Bug #63839 (iconv_mime_decode_headers function is skipping headers)
+--SKIPIF--
+<?php
+if (!extension_loaded('iconv')) die('skip iconv extension not available');
+?>
+--FILE--
+<?php
+$headers = 'From: "xyz" <xyz@xyz.com>
+To: <xyz@xyz.com>
+Subject: Reply Is? white side-LED =? in Help
+Date: Sat, 22 Dec 2012
+Message-ID: <006f01cde00e$d9f79da0$8de6d8e0>
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0070_01CDE03C.F3AFD9A0"
+X-Mailer: Microsoft Office Outlook 12.0
+Thread-Index: Ac3gDtcH2huHjzYcQVmFJPPoWjJogA==
+Content-Language: en-us
+
+';
+var_dump(iconv_mime_decode_headers($headers, ICONV_MIME_DECODE_CONTINUE_ON_ERROR));
+var_dump(iconv_mime_decode_headers($headers, ICONV_MIME_DECODE_STRICT));
+?>
+===DONE===
+--EXPECT--
+array(10) {
+ ["From"]=>
+ string(19) ""xyz" <xyz@xyz.com>"
+ ["To"]=>
+ string(13) "<xyz@xyz.com>"
+ ["Subject"]=>
+ string(35) "Reply Is? white side-LED =? in Help"
+ ["Date"]=>
+ string(16) "Sat, 22 Dec 2012"
+ ["Message-ID"]=>
+ string(32) "<006f01cde00e$d9f79da0$8de6d8e0>"
+ ["MIME-Version"]=>
+ string(3) "1.0"
+ ["Content-Type"]=>
+ string(75) "multipart/alternative; boundary="----=_NextPart_000_0070_01CDE03C.F3AFD9A0""
+ ["X-Mailer"]=>
+ string(29) "Microsoft Office Outlook 12.0"
+ ["Thread-Index"]=>
+ string(32) "Ac3gDtcH2huHjzYcQVmFJPPoWjJogA=="
+ ["Content-Language"]=>
+ string(5) "en-us"
+}
+array(10) {
+ ["From"]=>
+ string(19) ""xyz" <xyz@xyz.com>"
+ ["To"]=>
+ string(13) "<xyz@xyz.com>"
+ ["Subject"]=>
+ string(35) "Reply Is? white side-LED =? in Help"
+ ["Date"]=>
+ string(16) "Sat, 22 Dec 2012"
+ ["Message-ID"]=>
+ string(32) "<006f01cde00e$d9f79da0$8de6d8e0>"
+ ["MIME-Version"]=>
+ string(3) "1.0"
+ ["Content-Type"]=>
+ string(75) "multipart/alternative; boundary="----=_NextPart_000_0070_01CDE03C.F3AFD9A0""
+ ["X-Mailer"]=>
+ string(29) "Microsoft Office Outlook 12.0"
+ ["Thread-Index"]=>
+ string(32) "Ac3gDtcH2huHjzYcQVmFJPPoWjJogA=="
+ ["Content-Language"]=>
+ string(5) "en-us"
+}
+===DONE===