diff options
-rw-r--r-- | ext/ereg/ereg.c | 8 | ||||
-rw-r--r-- | ext/standard/reg.c | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c index bd049e1fb0..8a7d97c9bb 100644 --- a/ext/ereg/ereg.c +++ b/ext/ereg/ereg.c @@ -563,7 +563,7 @@ PHP_FUNCTION(split) } /* churn through str, generating array entries as we go */ - while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) { + while ((count == -1 || count > 0) && !(err = regexec(&re, strp, 1, subs, 0))) { if (subs[0].rm_so == 0 && subs[0].rm_eo) { /* match is at start of string, return empty string */ add_next_index_stringl(return_value, empty_string, 0, 1); @@ -604,9 +604,11 @@ PHP_FUNCTION(split) } /* otherwise we just have one last element to add to the array */ - size = endp - strp; + if (count == -1) { + size = endp - strp; - add_next_index_stringl(return_value, strp, size, 1); + add_next_index_stringl(return_value, strp, size, 1); + } regfree(&re); diff --git a/ext/standard/reg.c b/ext/standard/reg.c index bd049e1fb0..8a7d97c9bb 100644 --- a/ext/standard/reg.c +++ b/ext/standard/reg.c @@ -563,7 +563,7 @@ PHP_FUNCTION(split) } /* churn through str, generating array entries as we go */ - while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) { + while ((count == -1 || count > 0) && !(err = regexec(&re, strp, 1, subs, 0))) { if (subs[0].rm_so == 0 && subs[0].rm_eo) { /* match is at start of string, return empty string */ add_next_index_stringl(return_value, empty_string, 0, 1); @@ -604,9 +604,11 @@ PHP_FUNCTION(split) } /* otherwise we just have one last element to add to the array */ - size = endp - strp; + if (count == -1) { + size = endp - strp; - add_next_index_stringl(return_value, strp, size, 1); + add_next_index_stringl(return_value, strp, size, 1); + } regfree(&re); |