moriyoshi Wed, 23 Sep 2009 14:26:51 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=288612
Log: * Merge two patches from 5.3 branch (intentionally uncommited because 5.2.11 was about to come at that time). Changed paths: _U php/php-src/branches/PHP_5_2/ U php/php-src/branches/PHP_5_2/NEWS U php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf16.c U php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf8.c U php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/mbfl/mbfilter.c A + php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49528.phpt (from php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49528.phpt:r288260) A + php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49536.phpt (from php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49536.phpt:r288273) Property changes on: php/php-src/branches/PHP_5_2 ___________________________________________________________________ Modified: svn:mergeinfo - /php/php-src/branches/PHP_5_3:284120 /php/php-src/trunk:284726 + /php/php-src/branches/PHP_5_3:284120,288260,288273 /php/php-src/trunk:284726 Modified: php/php-src/branches/PHP_5_2/NEWS =================================================================== --- php/php-src/branches/PHP_5_2/NEWS 2009-09-23 14:18:04 UTC (rev 288611) +++ php/php-src/branches/PHP_5_2/NEWS 2009-09-23 14:26:51 UTC (rev 288612) @@ -3,8 +3,12 @@ ?? ??? ????, PHP 5.2.12 - Fixed bug #49630 (imap_listscan function missing). (Felipe) - Fixed bug #49578 (make install-pear fails). (Hannes) +- Fixed bug #49536 (mb_detect_encoding() returns incorrect results when + mbstring.strict_mode is turned on). (Moriyoshi) - Fixed bug #49531 (CURLOPT_INFILESIZE sometimes causes warning "CURLPROTO_FILE cannot be set"). (Felipe) +- Fixed bug #49528 (UTF-16 strings prefixed by BOMs wrondly converted). + (Moriyoshi) 17 Sep 2009, PHP 5.2.11 - Fixed certificate validation inside php_openssl_apply_verification_policy. Modified: php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf16.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf16.c 2009-09-23 14:18:04 UTC (rev 288611) +++ php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf16.c 2009-09-23 14:26:51 UTC (rev 288612) @@ -127,7 +127,7 @@ int n, endian; endian = filter->status & 0xff00; - switch (filter->status & 0xff) { + switch (filter->status & 0x0f) { case 0: if (endian) { n = c & 0xff; @@ -144,15 +144,8 @@ n = c & 0xff; } n |= filter->cache & 0xffff; - filter->status &= ~0xff; - if (n == 0xfffe) { - if (endian) { - filter->status = 0; /* big-endian */ - } else { - filter->status = 0x100; /* little-endian */ - } - CK((*filter->output_function)(0xfeff, filter->data)); - } else if (n >= 0xd800 && n < 0xdc00) { + filter->status &= ~0x0f; + if (n >= 0xd800 && n < 0xdc00) { filter->cache = ((n & 0x3ff) << 16) + 0x400000; } else if (n >= 0xdc00 && n < 0xe000) { n &= 0x3ff; @@ -166,7 +159,21 @@ CK((*filter->output_function)(n, filter->data)); } } else { + int is_first = filter->status & 0x10; filter->cache = 0; + filter->status |= 0x10; + if (!is_first) { + if (n == 0xfffe) { + if (endian) { + filter->status &= ~0x100; /* big-endian */ + } else { + filter->status |= 0x100; /* little-endian */ + } + break; + } else if (n == 0xfeff) { + break; + } + } CK((*filter->output_function)(n, filter->data)); } break; Modified: php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf8.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf8.c 2009-09-23 14:18:04 UTC (rev 288611) +++ php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/filters/mbfilter_utf8.c 2009-09-23 14:26:51 UTC (rev 288612) @@ -215,7 +215,7 @@ if (c < 0x80) { if (c < 0) { filter->flag = 1; /* bad */ - } else if (c != 0 && filter->status) { + } else if (filter->status) { filter->flag = 1; /* bad */ } filter->status = 0; Modified: php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/mbfl/mbfilter.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/mbfl/mbfilter.c 2009-09-23 14:18:04 UTC (rev 288611) +++ php/php-src/branches/PHP_5_2/ext/mbstring/libmbfl/mbfl/mbfilter.c 2009-09-23 14:26:51 UTC (rev 288612) @@ -622,7 +622,7 @@ if (!encoding) { for (i = 0; i < num; i++) { filter = &flist[i]; - if (!filter->flag) { + if (!filter->flag && (!strict || !filter->status)) { encoding = filter->encoding; break; } Copied: php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49528.phpt (from rev 288260, php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49528.phpt) =================================================================== --- php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49528.phpt (rev 0) +++ php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49528.phpt 2009-09-23 14:26:51 UTC (rev 288612) @@ -0,0 +1,20 @@ +--TEST-- +Bug #49528 (UTF-16 strings prefixed by BOM wrongly converted) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +?> +--EXPECT-- +string(8) "02010403" +string(8) "01020304" +string(12) "feff02010403" +string(12) "fffe02010403" +string(12) "fffe01020304" +string(12) "feff01020304" Copied: php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49536.phpt (from rev 288273, php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49536.phpt) =================================================================== --- php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49536.phpt (rev 0) +++ php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49536.phpt 2009-09-23 14:26:51 UTC (rev 288612) @@ -0,0 +1,20 @@ +--TEST-- +Bug #49536 (mb_detect_encoding() returns incorrect results when strict_mode is turned on) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// non-strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", false)); +// strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", true)); +// non-strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", false)); +// strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", true)); +?> +--EXPECT-- +string(4) "SJIS" +bool(false) +string(5) "UTF-8" +bool(false)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php