diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2018-09-22 15:43:06 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2018-09-22 15:56:49 +0200 |
commit | 150e2b8c8c7a6d4a80df6a4748bb4a521e98b3e8 (patch) | |
tree | acd02dbd917431f314ce6bc4e8026e04ce190b55 /ext/iconv | |
parent | 9f3aac9e390343d0058e5aedcc7e621cd44ed2b5 (diff) | |
parent | 7c2cc9aa56efb3f990967aee2fc0569df19a4d50 (diff) | |
download | php-git-150e2b8c8c7a6d4a80df6a4748bb4a521e98b3e8.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
Fix #66828: iconv_mime_encode Q-encoding longer than it should be
Diffstat (limited to 'ext/iconv')
-rw-r--r-- | ext/iconv/iconv.c | 4 | ||||
-rw-r--r-- | ext/iconv/tests/bug53891.phpt | 21 | ||||
-rw-r--r-- | ext/iconv/tests/bug66828.phpt | 21 |
3 files changed, 33 insertions, 13 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index d1b28c122d..bd21ede5ac 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1357,7 +1357,7 @@ static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fn prev_in_left = ini_in_left = in_left; ini_in_p = in_p; - for (out_size = (char_cnt - 2) / 3; out_size > 0;) { + for (out_size = (char_cnt - 2); out_size > 0;) { #if !ICONV_SUPPORTS_ERRNO size_t prev_out_left; #endif @@ -1421,7 +1421,7 @@ static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fn break; } - out_size -= ((nbytes_required - (char_cnt - 2)) + 1) / 3; + out_size -= ((nbytes_required - (char_cnt - 2)) + 2) / 3; in_left = ini_in_left; in_p = ini_in_p; } diff --git a/ext/iconv/tests/bug53891.phpt b/ext/iconv/tests/bug53891.phpt index 86ae9a9149..342b48e3a2 100644 --- a/ext/iconv/tests/bug53891.phpt +++ b/ext/iconv/tests/bug53891.phpt @@ -5,18 +5,17 @@ Bug #53891 (iconv_mime_encode() fails to Q-encode UTF-8 string) if (!extension_loaded('iconv')) die('skip iconv extension not available'); ?> --FILE-- -<?php
-$preferences = array(
- 'scheme' => 'Q',
- 'input-charset' => 'utf-8',
- 'output-charset' => 'utf-8',
- 'line-length' => 74,
- 'line-break-chars' => "\r\n",
-);
-var_dump(iconv_mime_encode('subject', "d obeybiubrsfqllpdtpge…", $preferences));
+<?php +$preferences = array( + 'scheme' => 'Q', + 'input-charset' => 'utf-8', + 'output-charset' => 'utf-8', + 'line-length' => 74, + 'line-break-chars' => "\r\n", +); +var_dump(iconv_mime_encode('subject', "d obeybiubrsfqllpdtpge…", $preferences)); ?> ===DONE=== --EXPECT-- -string(81) "subject: =?utf-8?Q?d=20obeybiubrsfqllp?==?utf-8?Q?dtpge?= - =?utf-8?Q?=E2=80=A6?=" +string(54) "subject: =?utf-8?Q?d=20obeybiubrsfqllpdtpge=E2=80=A6?=" ===DONE=== diff --git a/ext/iconv/tests/bug66828.phpt b/ext/iconv/tests/bug66828.phpt new file mode 100644 index 0000000000..9914b41b14 --- /dev/null +++ b/ext/iconv/tests/bug66828.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #66828 (iconv_mime_encode Q-encoding longer than it should be) +--SKIPIF-- +<?php +if (!extension_loaded('iconv')) die('skip iconv extension not available'); +?> +--FILE-- +<?php +$preferences = array( + "input-charset" => "ISO-8859-1", + "output-charset" => "UTF-8", + "line-length" => 76, + "line-break-chars" => "\n", + "scheme" => "Q" +); +var_dump(iconv_mime_encode("Subject", "Test Test Test Test Test Test Test Test", $preferences)); +?> +===DONE=== +--EXPECT-- +string(74) "Subject: =?UTF-8?Q?Test=20Test=20Test=20Test=20Test=20Test=20Test=20Test?=" +===DONE=== |