summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-10-11 11:53:02 +0000
committerAntony Dovgal <tony2001@php.net>2006-10-11 11:53:02 +0000
commit2f467baf946eae829ff874a1a1516837e5b6e623 (patch)
tree01a649ce7673875d0ecced9c690d8a27c810e86d
parenta81eae5d01da00878396798e396c4f0828e29ba8 (diff)
downloadphp-git-2f467baf946eae829ff874a1a1516837e5b6e623.tar.gz
MFH
-rw-r--r--ext/mbstring/php_mbregex.c11
-rw-r--r--ext/mbstring/tests/mb_ereg2.phpt41
2 files changed, 46 insertions, 6 deletions
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index 4c381c3755..de8dfddc19 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -517,7 +517,6 @@ PHP_FUNCTION(mb_regex_encoding)
/* {{{ _php_mb_regex_ereg_exec */
static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
{
- zval tmp;
zval **arg_pattern, *array;
char *string;
int string_len;
@@ -564,19 +563,18 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
match_len = 1;
str = string;
if (array != NULL) {
- zval ret_array;
match_len = regs->end[0] - regs->beg[0];
- array_init(&ret_array);
+ zval_dtor(array);
+ array_init(array);
for (i = 0; i < regs->num_regs; i++) {
beg = regs->beg[i];
end = regs->end[i];
if (beg >= 0 && beg < end && end <= string_len) {
- add_index_stringl(&ret_array, i, (char *)&str[beg], end - beg, 1);
+ add_index_stringl(array, i, (char *)&str[beg], end - beg, 1);
} else {
- add_index_bool(&ret_array, i, 0);
+ add_index_bool(array, i, 0);
}
}
- REPLACE_ZVAL_VALUE(&array, &ret_array, 0);
}
if (match_len == 0) {
@@ -1098,6 +1096,7 @@ PHP_FUNCTION(mb_ereg_search_init)
WRONG_PARAM_COUNT;
break;
}
+ convert_to_string_ex(arg_str);
if (ZEND_NUM_ARGS() > 1) {
/* create regex pattern buffer */
convert_to_string_ex(arg_pattern);
diff --git a/ext/mbstring/tests/mb_ereg2.phpt b/ext/mbstring/tests/mb_ereg2.phpt
new file mode 100644
index 0000000000..922a8e78d4
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg2.phpt
@@ -0,0 +1,41 @@
+--TEST--
+mb_ereg() returning matches
+--SKIPIF--
+<?php if (!function_exists("mb_ereg")) print "skip"; ?>
+--FILE--
+<?php
+
+$a = -1; $b = -1; $c = -1;
+mbereg($a, $b, $c);
+var_dump($a, $b, $c);
+
+mberegi($a, $b, $c);
+var_dump($a, $b, $c);
+
+mbereg_search_init($a, $b, $c);
+var_dump($a, $b, $c);
+
+echo "Done\n";
+?>
+--EXPECTF--
+int(-1)
+int(-1)
+array(1) {
+ [0]=>
+ string(2) "-1"
+}
+int(-1)
+int(-1)
+array(1) {
+ [0]=>
+ string(2) "-1"
+}
+
+Notice: Array to string conversion in %s on line %d
+int(-1)
+int(-1)
+array(1) {
+ [0]=>
+ string(2) "-1"
+}
+Done