]> granicus.if.org Git - php/commitdiff
Normalize preg_replace_callback() return value
authorNikita Popov <nikic@php.net>
Sat, 15 Oct 2016 21:03:03 +0000 (23:03 +0200)
committerNikita Popov <nikic@php.net>
Sat, 15 Oct 2016 21:58:26 +0000 (23:58 +0200)
One particular error case was returning the argument without
casting to string.

ext/pcre/php_pcre.c
ext/pcre/tests/preg_replace_callback3.phpt

index ef9569b8605cefe0609869816fcf7a5c8c44a752..53e122c82bf393d2eeb20f2f0c33ea97762484f3 100644 (file)
@@ -1584,7 +1584,7 @@ static PHP_FUNCTION(preg_replace_callback)
        if (!zend_is_callable(replace, 0, &callback_name)) {
                php_error_docref(NULL, E_WARNING, "Requires argument 2, '%s', to be a valid callback", ZSTR_VAL(callback_name));
                zend_string_release(callback_name);
-               ZVAL_COPY(return_value, subject);
+               ZVAL_STR(return_value, zval_get_string(subject));
                return;
        }
        zend_string_release(callback_name);
index 6484c074fe4ac6fde44a5c5ef5f0b8ef424ace05..fc3218b9e7cb2730024803b52b566ecb790d4010 100644 (file)
@@ -28,13 +28,13 @@ Warning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on
 NULL
 
 Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
-int(3)
+string(1) "3"
 
 Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
-int(3)
+string(1) "3"
 
 Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
-int(3)
+string(1) "3"
 
 Warning: preg_replace_callback() expects parameter 4 to be integer, string given in %s on line %d
 NULL