cvs: php-src(PHP_5_2) /ext/standard string.c /ext/standard/tests/strings stripos.phpt
| From: | Antony Dovgal | Date: | Wed, 12 Jul 2006 12:33:48 +0000 |
| Subject: | cvs: php-src(PHP_5_2) /ext/standard string.c /ext/standard/tests/strings stripos.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-39192@lists.php.net to get a copy of this message | ||
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