colder Wed Feb 13 16:59:56 2008 UTC Modified files: /php-src/ext/standard string.c /php-src/ext/standard/tests/strings substr.phpt substr_compare.phpt Log: Fix inconcistencies between substr and substr_compare http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.667&r2=1.668&diff_format=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.667 php-src/ext/standard/string.c:1.668 --- php-src/ext/standard/string.c:1.667 Tue Feb 12 01:03:43 2008 +++ php-src/ext/standard/string.c Wed Feb 13 16:59:56 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.667 2008/02/12 01:03:43 stas Exp $ */ +/* $Id: string.c,v 1.668 2008/02/13 16:59:56 colder Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -7985,10 +7985,6 @@ --len; } - if (len > 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The specified segment exceeds string length"); - RETURN_FALSE; - } } else { end_offset = s1_len; } @@ -8006,14 +8002,13 @@ offset = (offset < 0) ? 0 : offset; } - if (offset > s1_len) { + if (offset >= s1_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The start position cannot exceed initial string length"); RETURN_FALSE; } if (len > s1_len - offset) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The specified segment exceeds string length"); - RETURN_FALSE; + len = s1_len - offset; } cmp_len = (uint) (len ? len : MAX(s2_len, (s1_len - offset))); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/substr.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/standard/tests/strings/substr.phpt diff -u php-src/ext/standard/tests/strings/substr.phpt:1.3 php-src/ext/standard/tests/strings/substr.phpt:1.4 --- php-src/ext/standard/tests/strings/substr.phpt:1.3 Mon Jul 9 11:38:34 2007 +++ php-src/ext/standard/tests/strings/substr.phpt Wed Feb 13 16:59:56 2008 @@ -75,6 +75,10 @@ /* String with international characters */ echo ("\n*** Testing for string with international characters ***\n"); var_dump (substr('\xIñtërnâtiônà lizætiøn',3) ); + +/* start <0 && -start > length */ +echo "\n*** Start before the first char ***\n"; +var_dump (substr("abcd" , -8) ); echo"\nDone"; @@ -218,6 +222,9 @@ *** Testing for string with international characters *** string(26) "ñtërnâtiônà lizætiøn" +*** Start before the first char *** +string(4) "abcd" + Done --UEXPECTF-- *** Testing for error conditions *** @@ -358,4 +365,7 @@ *** Testing for string with international characters *** unicode(26) "ñtërnâtiônà lizætiøn" +*** Start before the first char *** +string(4) "abcd" + Done http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/substr_compare.phpt?r1=1.6&r2=1.7&diff_format=u Index: php-src/ext/standard/tests/strings/substr_compare.phpt diff -u php-src/ext/standard/tests/strings/substr_compare.phpt:1.6 php-src/ext/standard/tests/strings/substr_compare.phpt:1.7 --- php-src/ext/standard/tests/strings/substr_compare.phpt:1.6 Fri Apr 20 21:37:31 2007 +++ php-src/ext/standard/tests/strings/substr_compare.phpt Wed Feb 13 16:59:56 2008 @@ -9,6 +9,7 @@ var_dump(substr_compare("abcde", "bc", 1, 3)); var_dump(substr_compare("abcde", "cd", 1, 2)); var_dump(substr_compare("abcde", "abc", 5, 1)); +var_dump(substr_compare("abcde", "abcdef", -10, 10)); var_dump(substr_compare("abcde", -1, 0, NULL, new stdClass)); echo "Test\n"; @@ -24,8 +25,9 @@ int(1) int(-1) -Warning: substr_compare(): The specified segment exceeds string length in %s on line %d +Warning: substr_compare(): The start position cannot exceed initial string length in %s on line %d bool(false) +int(0) Warning: substr_compare() expects parameter 5 to be boolean, object given in %s on line %d bool(false) @@ -44,8 +46,9 @@ int(1) int(-1) -Warning: substr_compare(): The specified segment exceeds string length in %s on line %d +Warning: substr_compare(): The start position cannot exceed initial string length in %s on line %d bool(false) +int(0) Warning: substr_compare() expects parameter 5 to be boolean, object given in %s on line %d bool(false)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php