diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/mbstring/libmbfl/mbfl/mbfilter.c | 1 | ||||
| -rw-r--r-- | ext/mbstring/tests/bug43993.phpt | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c index 97d2f048cc..50a0853665 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -1013,6 +1013,7 @@ mbfl_substr_count( if (pc.matched_pos >= 0) { ++result; pc.matched_pos = -1; + pc.needle_pos = 0; } n--; } diff --git a/ext/mbstring/tests/bug43993.phpt b/ext/mbstring/tests/bug43993.phpt new file mode 100644 index 0000000000..662045d3a9 --- /dev/null +++ b/ext/mbstring/tests/bug43993.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #43993 (mb_substr_count() behaves differently to substr_count() with overlapping needles) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(mb_substr_count("abcabcabca", "abcabc")); +var_dump(mb_substr_count("abcabcabca", "abc")); +var_dump(mb_substr_count("abcabcabca", "cab")); +var_dump(mb_substr_count("abcabcabca", "bca")); +var_dump(mb_substr_count("ababababab", "ba")); +var_dump(mb_substr_count("ababababab", "ab")); +var_dump(mb_substr_count("ababababab", "bc")); +var_dump(mb_substr_count("aaaaaaaaaa", "a")); +var_dump(mb_substr_count("aaaaaaaaaa", "b")); +?> +--EXPECT-- +int(1) +int(3) +int(2) +int(3) +int(4) +int(5) +int(0) +int(10) +int(0) |
