svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/iconv/iconv.c branches/PHP_5_3/ext/iconv/tests/bug51250.phpt trunk/ext/iconv/iconv.c
trunk/ext/iconv/tests/bug51250.phpt
| From: | Ilia Alshanetsky | Date: | Wed, 01 Dec 2010 14:03:36 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/iconv/iconv.c branches/PHP_5_3/ext/iconv/tests/bug51250.phpt trunk/ext/iconv/iconv.c trunk/ext/iconv/tests/bug51250.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-63992@lists.php.net to get a copy of this message | ||
iliaa Wed, 01 Dec 2010 14:03:36 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=305887
Log:
Fixed bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded words)
Bug: http://bugs.php.net/51250 (error getting bug
information)
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/ext/iconv/iconv.c
A php/php-src/branches/PHP_5_3/ext/iconv/tests/bug51250.phpt
U php/php-src/trunk/ext/iconv/iconv.c
A php/php-src/trunk/ext/iconv/tests/bug51250.phpt
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2010-12-01 13:33:49 UTC (rev 305886)
+++ php/php-src/branches/PHP_5_3/NEWS 2010-12-01 14:03:36 UTC (rev 305887)
@@ -25,6 +25,10 @@
- Hash extension:
. Fixed bug #51003 (unaligned memory access in ext/hash/hash_tiger.c).
(Mike, Ilia)
+
+- Iconv extension:
+ . Fixed bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded
+ words). (Ilia)
- Intl extension:
. Fixed crashes on invalid parameters in intl extension. (Stas, Maksymilian
Modified: php/php-src/branches/PHP_5_3/ext/iconv/iconv.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/iconv/iconv.c 2010-12-01 13:33:49 UTC (rev 305886)
+++ php/php-src/branches/PHP_5_3/ext/iconv/iconv.c 2010-12-01 14:03:36 UTC (rev 305887)
@@ -1698,10 +1698,10 @@
if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
/* pass the entire chunk through the converter */
err = _php_iconv_appendl(pretval, encoded_word, (size_t)(p1 - encoded_word), cd_pl);
+ encoded_word = NULL;
if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
+ break;
}
- encoded_word = NULL;
} else {
goto out;
}
Added: php/php-src/branches/PHP_5_3/ext/iconv/tests/bug51250.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/iconv/tests/bug51250.phpt (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/iconv/tests/bug51250.phpt 2010-12-01 14:03:36 UTC (rev 305887)
@@ -0,0 +1,29 @@
+--TEST--
+Bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded words)
+--SKIPIF--
+<?php extension_loaded('iconv') or die('skip iconv extension is not
available'); ?>
+--FILE--
+<?php
+$m = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= .", $m));
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= .", $m));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?= .",
$m));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?= .",
$m));
+
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= ."));
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= ."));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?=
."));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?=
."));
+?>
+--EXPECTF--
+string(23) "Legal encoded-word: * ."
+string(23) "Legal encoded-word: * ."
+string(24) "Illegal encoded-word: ."
+string(23) "Illegal encoded-word: ."
+string(23) "Legal encoded-word: * ."
+string(23) "Legal encoded-word: * ."
+string(24) "Illegal encoded-word: ."
+
+Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
+bool(false)
Modified: php/php-src/trunk/ext/iconv/iconv.c
===================================================================
--- php/php-src/trunk/ext/iconv/iconv.c 2010-12-01 13:33:49 UTC (rev 305886)
+++ php/php-src/trunk/ext/iconv/iconv.c 2010-12-01 14:03:36 UTC (rev 305887)
@@ -1762,10 +1762,10 @@
if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
/* pass the entire chunk through the converter */
err = _php_iconv_appendl(pretval, encoded_word, (size_t)(p1 - encoded_word), cd_pl);
+ encoded_word = NULL;
if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
+ break;
}
- encoded_word = NULL;
} else {
goto out;
}
Added: php/php-src/trunk/ext/iconv/tests/bug51250.phpt
===================================================================
--- php/php-src/trunk/ext/iconv/tests/bug51250.phpt (rev 0)
+++ php/php-src/trunk/ext/iconv/tests/bug51250.phpt 2010-12-01 14:03:36 UTC (rev 305887)
@@ -0,0 +1,29 @@
+--TEST--
+Bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded words)
+--SKIPIF--
+<?php extension_loaded('iconv') or die('skip iconv extension is not
available'); ?>
+--FILE--
+<?php
+$m = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= .", $m));
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= .", $m));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?= .",
$m));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?= .",
$m));
+
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= ."));
+var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= ."));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?=
."));
+var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?=
."));
+?>
+--EXPECTF--
+string(23) "Legal encoded-word: * ."
+string(23) "Legal encoded-word: * ."
+string(24) "Illegal encoded-word: ."
+string(23) "Illegal encoded-word: ."
+string(23) "Legal encoded-word: * ."
+string(23) "Legal encoded-word: * ."
+string(24) "Illegal encoded-word: ."
+
+Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
+bool(false)