]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #43993 (mb_substr_count() behaves differently to substr_count()...
authorMoriyoshi Koizumi <moriyoshi@php.net>
Fri, 1 Aug 2008 22:56:47 +0000 (22:56 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Fri, 1 Aug 2008 22:56:47 +0000 (22:56 +0000)
ext/mbstring/libmbfl/mbfl/mbfilter.c
ext/mbstring/tests/bug43993.phpt [new file with mode: 0644]

index 97d2f048ccacc18608697169a566d58c9b4bab09..50a0853665a5f482a08959b80170f00ee71c3d60 100644 (file)
@@ -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 (file)
index 0000000..662045d
--- /dev/null
@@ -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)