summaryrefslogtreecommitdiff
path: root/ext/mbstring/php_mbregex.c
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-10-11 11:09:42 +0000
committerAntony Dovgal <tony2001@php.net>2006-10-11 11:09:42 +0000
commita81eae5d01da00878396798e396c4f0828e29ba8 (patch)
treec7629a005730d7e4a9bc45eb603642282975555e /ext/mbstring/php_mbregex.c
parent9f5de3bb5cb94bba8e7c7ef25455af2b16784433 (diff)
downloadphp-git-a81eae5d01da00878396798e396c4f0828e29ba8.tar.gz
MFH: fix segfault/leak, add test
Diffstat (limited to 'ext/mbstring/php_mbregex.c')
-rw-r--r--ext/mbstring/php_mbregex.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index e10802be9f..4c381c3755 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -518,7 +518,7 @@ PHP_FUNCTION(mb_regex_encoding)
static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
{
zval tmp;
- zval *arg_pattern, *array;
+ zval **arg_pattern, *array;
char *string;
int string_len;
php_mb_regex_t *re;
@@ -529,7 +529,7 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
array = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|z", &arg_pattern, &string, &string_len, &array) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs|z", &arg_pattern, &string, &string_len, &array) == FAILURE) {
RETURN_FALSE;
}
@@ -539,18 +539,15 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
}
/* compile the regular expression from the supplied regex */
- if (Z_TYPE_P(arg_pattern) != IS_STRING) {
+ if (Z_TYPE_PP(arg_pattern) != IS_STRING) {
/* we convert numbers to integers and treat them as a string */
- tmp = *arg_pattern;
- zval_copy_ctor(&tmp);
- if (Z_TYPE_P(&tmp) == IS_DOUBLE) {
- convert_to_long(&tmp); /* get rid of decimal places */
+ if (Z_TYPE_PP(arg_pattern) == IS_DOUBLE) {
+ convert_to_long_ex(arg_pattern); /* get rid of decimal places */
}
- convert_to_string(&tmp);
- arg_pattern = &tmp;
+ convert_to_string_ex(arg_pattern);
/* don't bother doing an extended regex with just a number */
}
- re = php_mbregex_compile_pattern(Z_STRVAL_P(arg_pattern), Z_STRLEN_P(arg_pattern), options, MBSTRG(current_mbctype), MBSTRG(regex_default_syntax) TSRMLS_CC);
+ re = php_mbregex_compile_pattern(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern), options, MBSTRG(current_mbctype), MBSTRG(regex_default_syntax) TSRMLS_CC);
if (re == NULL) {
RETVAL_FALSE;
goto out;
@@ -590,9 +587,6 @@ out:
if (regs != NULL) {
onig_region_free(regs, 1);
}
- if (arg_pattern == &tmp) {
- zval_dtor(&tmp);
- }
}
/* }}} */