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