diff --git a/ext/standard/string.c b/ext/standard/string.c index 25580ba5e3d..f4efa6c5002 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -2429,8 +2429,13 @@ PHP_FUNCTION(stripos) } haystack_len = Z_UNILEN_P(haystack); + + if (haystack_len == 0) { + RETURN_FALSE; + } + if (Z_TYPE_P(needle) == IS_UNICODE || Z_TYPE_P(needle) == IS_STRING) { - if (!Z_UNILEN_P(needle)) { + if (!Z_UNILEN_P(needle) || Z_UNILEN_P(needle) > haystack_len) { RETURN_FALSE; } if (Z_TYPE_P(haystack) != Z_TYPE_P(needle)) { diff --git a/ext/standard/tests/strings/stripos.phpt b/ext/standard/tests/strings/stripos.phpt new file mode 100644 index 00000000000..ef0efe5b236 --- /dev/null +++ b/ext/standard/tests/strings/stripos.phpt @@ -0,0 +1,55 @@ +--TEST-- +stripos() function test +--FILE-- + +--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