summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-10-11 14:19:55 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-10-11 14:19:55 +0000
commita39201675f4c2553f1f213db239723bede78735f (patch)
tree721c53bb074fcbf8984425a6ddf3293882819583
parent9b7ba016184b3d9de814ef0ac00b20856295a47f (diff)
downloadphp-git-a39201675f4c2553f1f213db239723bede78735f.tar.gz
Catch empty strings right away.
-rw-r--r--ext/standard/string.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 499fcefa7c..7fe1e5ef4e 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -4851,19 +4851,18 @@ PHP_FUNCTION(str_word_count)
return;
}
- if (char_list) {
- php_charmask(char_list, char_list_len, ch TSRMLS_CC);
- }
-
- p = str;
- e = str + str_len;
-
switch(type) {
case 1:
case 2:
array_init(return_value);
+ if (!str_len) {
+ return;
+ }
break;
case 0:
+ if (!str_len) {
+ RETURN_LONG(0);
+ }
/* nothing to be done */
break;
default:
@@ -4871,12 +4870,19 @@ PHP_FUNCTION(str_word_count)
RETURN_FALSE;
}
+ if (char_list) {
+ php_charmask(char_list, char_list_len, ch TSRMLS_CC);
+ }
+
+ p = str;
+ e = str + str_len;
+
/* first character cannot be ' or -, unless explicitly allowed by the user */
if ((*p == '\'' && (!char_list || !ch['\''])) || (*p == '-' && (!char_list || !ch['-']))) {
p++;
}
/* last character cannot be -, unless explicitly allowed by the user */
- if (str_len && *(e - 1) == '-' && (!char_list || !ch['-'])) {
+ if (*(e - 1) == '-' && (!char_list || !ch['-'])) {
e--;
}