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

Reply via email to