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)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
