svn: /php/php-src/ branches/PHP_5_2/NEWS branches/PHP_5_2/ext/mbstring/mbstring.c branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt
branches/PHP_5_3/ext/mbstring/mbstring.c branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt trunk/ext/mbstring/mbstring.c
trunk/ext/mbstring/tests/bug49354.phpt
| From: | Moriyoshi Koizumi | Date: | Wed, 23 Sep 2009 15:22:47 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_2/NEWS branches/PHP_5_2/ext/mbstring/mbstring.c branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt branches/PHP_5_3/ext/mbstring/mbstring.c branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt trunk/ext/mbstring/mbstring.c trunk/ext/mbstring/tests/bug49354.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-60495@lists.php.net to get a copy of this message | ||
moriyoshi Wed, 23 Sep 2009 15:22:47 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=288613
Log:
- Fixed bug #49354 (mb_strcut() cuts wrong length when offset is within a
multibyte character).
(This bug was introduced by the commit by r202895. Please double-check the
specification of the function you are going to *fix*.)
Bug: http://bugs.php.net/49354 (Assigned) mb_strcut()
cutting wrong length when offset is within a multibyte character
Changed paths:
U php/php-src/branches/PHP_5_2/NEWS
U php/php-src/branches/PHP_5_2/ext/mbstring/mbstring.c
A php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt
U php/php-src/branches/PHP_5_3/ext/mbstring/mbstring.c
A php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt
U php/php-src/trunk/ext/mbstring/mbstring.c
A php/php-src/trunk/ext/mbstring/tests/bug49354.phpt
Modified: php/php-src/branches/PHP_5_2/NEWS
===================================================================
--- php/php-src/branches/PHP_5_2/NEWS 2009-09-23 14:26:51 UTC (rev 288612)
+++ php/php-src/branches/PHP_5_2/NEWS 2009-09-23 15:22:47 UTC (rev 288613)
@@ -7,6 +7,8 @@
mbstring.strict_mode is turned on). (Moriyoshi)
- Fixed bug #49531 (CURLOPT_INFILESIZE sometimes causes warning "CURLPROTO_FILE
cannot be set"). (Felipe)
+- Fixed bug #49354 (mb_strcut() cuts wrong length when offset is in the middle
+ of a multibyte character). (Moriyoshi)
- Fixed bug #49528 (UTF-16 strings prefixed by BOMs wrondly converted).
(Moriyoshi)
Modified: php/php-src/branches/PHP_5_2/ext/mbstring/mbstring.c
===================================================================
--- php/php-src/branches/PHP_5_2/ext/mbstring/mbstring.c 2009-09-23 14:26:51 UTC (rev 288612)
+++ php/php-src/branches/PHP_5_2/ext/mbstring/mbstring.c 2009-09-23 15:22:47 UTC (rev 288613)
@@ -2272,9 +2272,6 @@
if (from > Z_STRLEN_PP(arg1)) {
RETURN_FALSE;
}
- if (((unsigned) from + (unsigned) len) > Z_STRLEN_PP(arg1)) {
- len = Z_STRLEN_PP(arg1) - from;
- }
ret = mbfl_strcut(&string, &result, from, len);
if (ret != NULL) {
Added: php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt (rev 0)
+++ php/php-src/branches/PHP_5_2/ext/mbstring/tests/bug49354.phpt 2009-09-23 15:22:47 UTC (rev
288613)
@@ -0,0 +1,21 @@
+--TEST--
+Bug #49354 (mb_strcut() cuts wrong length when offset is in the middle of a multibyte character)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available');
?>
+--FILE--
+<?php
+$crap = 'AåBäCöDü';
+var_dump(mb_strcut($crap, 0, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 1, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 2, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 3, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 12, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 13, 100, 'UTF-8'));
+?>
+--EXPECT--
+string(12) "AåBäCöDü"
+string(11) "åBäCöDü"
+string(11) "åBäCöDü"
+string(9) "BäCöDü"
+string(0) ""
+bool(false)
Modified: php/php-src/branches/PHP_5_3/ext/mbstring/mbstring.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mbstring/mbstring.c 2009-09-23 14:26:51 UTC (rev 288612)
+++ php/php-src/branches/PHP_5_3/ext/mbstring/mbstring.c 2009-09-23 15:22:47 UTC (rev 288613)
@@ -2665,10 +2665,6 @@
RETURN_FALSE;
}
- if (((unsigned int)from + (unsigned int)len) > string.len) {
- len = string.len - from;
- }
-
ret = mbfl_strcut(&string, &result, from, len);
if (ret == NULL) {
RETURN_FALSE;
Added: php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/mbstring/tests/bug49354.phpt 2009-09-23 15:22:47 UTC (rev
288613)
@@ -0,0 +1,21 @@
+--TEST--
+Bug #49354 (mb_strcut() cuts wrong length when offset is in the middle of a multibyte character)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available');
?>
+--FILE--
+<?php
+$crap = 'AåBäCöDü';
+var_dump(mb_strcut($crap, 0, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 1, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 2, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 3, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 12, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 13, 100, 'UTF-8'));
+?>
+--EXPECT--
+string(12) "AåBäCöDü"
+string(11) "åBäCöDü"
+string(11) "åBäCöDü"
+string(9) "BäCöDü"
+string(0) ""
+bool(false)
Modified: php/php-src/trunk/ext/mbstring/mbstring.c
===================================================================
--- php/php-src/trunk/ext/mbstring/mbstring.c 2009-09-23 14:26:51 UTC (rev 288612)
+++ php/php-src/trunk/ext/mbstring/mbstring.c 2009-09-23 15:22:47 UTC (rev 288613)
@@ -2664,10 +2664,6 @@
RETURN_FALSE;
}
- if (((unsigned int)from + (unsigned int)len) > string.len) {
- len = string.len - from;
- }
-
ret = mbfl_strcut(&string, &result, from, len);
if (ret == NULL) {
RETURN_FALSE;
Added: php/php-src/trunk/ext/mbstring/tests/bug49354.phpt
===================================================================
--- php/php-src/trunk/ext/mbstring/tests/bug49354.phpt (rev 0)
+++ php/php-src/trunk/ext/mbstring/tests/bug49354.phpt 2009-09-23 15:22:47 UTC (rev 288613)
@@ -0,0 +1,21 @@
+--TEST--
+Bug #49354 (mb_strcut() cuts wrong length when offset is in the middle of a multibyte character)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available');
?>
+--FILE--
+<?php
+$crap = 'AåBäCöDü';
+var_dump(mb_strcut($crap, 0, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 1, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 2, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 3, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 12, 100, 'UTF-8'));
+var_dump(mb_strcut($crap, 13, 100, 'UTF-8'));
+?>
+--EXPECT--
+string(12) "AåBäCöDü"
+string(11) "åBäCöDü"
+string(11) "åBäCöDü"
+string(9) "BäCöDü"
+string(0) ""
+bool(false)