diff options
| -rw-r--r-- | ext/standard/string.c | 4 | ||||
| -rw-r--r-- | ext/standard/tests/strings/bug74041.phpt | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index 851775503e..3addfbd19d 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -5276,10 +5276,10 @@ PHP_FUNCTION(substr_count) if (ac == 4) { - if (length <= 0) { + if (length < 0) { length += (haystack_len - offset); } - if ((length <= 0) || ((size_t)length > (haystack_len - offset))) { + if (length < 0 || ((size_t)length > (haystack_len - offset))) { php_error_docref(NULL, E_WARNING, "Invalid length value"); RETURN_FALSE; } diff --git a/ext/standard/tests/strings/bug74041.phpt b/ext/standard/tests/strings/bug74041.phpt new file mode 100644 index 0000000000..598e46d880 --- /dev/null +++ b/ext/standard/tests/strings/bug74041.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #74041: substr_count with length=0 broken +--FILE-- +<?php + +var_dump(substr_count("aaa", "a", 0, 0)); +var_dump(substr_count("", "a", 0, 0)); + +?> +--EXPECT-- +int(0) +int(0) |
