tony2001 Wed Jul 12 12:33:48 2006 UTC Added files: (Branch: PHP_5_2) /php-src/ext/standard/tests/strings stripos.phpt
Modified files: /php-src/ext/standard string.c Log: fix invalid read - no need to compare strings if haystack is "" or shorter than needle add test http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.4&r2=1.445.2.14.2.5&diff_format=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.445.2.14.2.4 php-src/ext/standard/string.c:1.445.2.14.2.5 --- php-src/ext/standard/string.c:1.445.2.14.2.4 Mon Jun 26 18:48:56 2006 +++ php-src/ext/standard/string.c Wed Jul 12 12:33:48 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.445.2.14.2.4 2006/06/26 18:48:56 bjori Exp $ */ +/* $Id: string.c,v 1.445.2.14.2.5 2006/07/12 12:33:48 tony2001 Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -1627,10 +1627,19 @@ RETURN_FALSE; } + if (haystack_len == 0) { + RETURN_FALSE; + } + haystack_dup = estrndup(haystack, haystack_len); php_strtolower(haystack_dup, haystack_len); if (Z_TYPE_P(needle) == IS_STRING) { + if (Z_STRLEN_P(needle) == 0 || Z_STRLEN_P(needle) > haystack_len) { + efree(haystack_dup); + RETURN_FALSE; + } + needle_dup = estrndup(Z_STRVAL_P(needle), Z_STRLEN_P(needle)); php_strtolower(needle_dup, Z_STRLEN_P(needle)); found = php_memnstr(haystack_dup + offset, needle_dup, Z_STRLEN_P(needle), haystack_dup + haystack_len); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/stripos.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/strings/stripos.phpt +++ php-src/ext/standard/tests/strings/stripos.phpt --TEST-- stripos() function test --FILE-- <?php var_dump(stripos("test string", "TEST")); var_dump(stripos("test string", "strIng")); var_dump(stripos("test string", "stRin")); var_dump(stripos("test string", "t S")); var_dump(stripos("test string", "G")); var_dump(stripos("te".chr(0)."st", chr(0))); var_dump(stripos("tEst", "test")); var_dump(stripos("teSt", "test")); var_dump(stripos("", "")); var_dump(stripos("a", "")); var_dump(stripos("", "a")); var_dump(stripos("a", " ")); var_dump(stripos("a", "a")); var_dump(stripos("", 1)); var_dump(stripos("", false)); var_dump(stripos("", true)); var_dump(stripos("a", 1)); var_dump(stripos("a", false)); var_dump(stripos("a", true)); var_dump(stripos("1", 1)); var_dump(stripos("0", false)); var_dump(stripos("1", true)); var_dump(stripos("\\\\a", "\\a")); echo "Done\n"; ?> --EXPECT-- int(0) int(5) int(5) int(3) int(10) int(2) int(0) int(0) bool(false) bool(false) bool(false) bool(false) int(0) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) int(1) Done -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php