Browse Source

Fixed bug in str_word_count() when charlist if specified and "word" starts

with a character found inside the charlist.
PHP-5.1
Ilia Alshanetsky 21 years ago
parent
commit
29bf2d3a09
  1. 8
      ext/standard/string.c
  2. 12
      ext/standard/tests/strings/str_word_count.phpt

8
ext/standard/string.c

@ -4739,8 +4739,8 @@ PHP_FUNCTION(str_word_count)
} }
while (p < e) { while (p < e) {
if (isalpha(*p++)) {
s = p - 1;
if (isalpha(*p) || (char_list && ch[(unsigned char)*p])) {
s = ++p - 1;
while (isalpha(*p) || *p == '\'' || (*p == '-' && isalpha(*(p+1))) || (char_list && ch[(unsigned char)*p])) { while (isalpha(*p) || *p == '\'' || (*p == '-' && isalpha(*(p+1))) || (char_list && ch[(unsigned char)*p])) {
p++; p++;
} }
@ -4761,7 +4761,9 @@ PHP_FUNCTION(str_word_count)
word_count++; word_count++;
break; break;
} }
}
} else {
p++;
}
} }
if (!type) { if (!type) {

12
ext/standard/tests/strings/str_word_count.phpt

@ -118,7 +118,7 @@ array(6) {
[2]=> [2]=>
string(1) "r" string(1) "r"
[3]=> [3]=>
string(1) "s"
string(2) "1s"
[4]=> [4]=>
string(3) "bar" string(3) "bar"
[5]=> [5]=>
@ -130,7 +130,7 @@ array(5) {
[1]=> [1]=>
string(3) "B4r" string(3) "B4r"
[2]=> [2]=>
string(1) "s"
string(2) "1s"
[3]=> [3]=>
string(3) "bar" string(3) "bar"
[4]=> [4]=>
@ -181,8 +181,8 @@ array(6) {
string(1) "B" string(1) "B"
[6]=> [6]=>
string(1) "r" string(1) "r"
[9]=>
string(1) "s"
[8]=>
string(2) "1s"
[11]=> [11]=>
string(3) "bar" string(3) "bar"
[15]=> [15]=>
@ -193,8 +193,8 @@ array(5) {
string(3) "F0o" string(3) "F0o"
[4]=> [4]=>
string(3) "B4r" string(3) "B4r"
[9]=>
string(1) "s"
[8]=>
string(2) "1s"
[11]=> [11]=>
string(3) "bar" string(3) "bar"
[15]=> [15]=>

Loading…
Cancel
Save