]> granicus.if.org Git - php/commitdiff
Fixed preg_replace_callback() with callback defined by array
authorDmitry Stogov <dmitry@php.net>
Tue, 10 Jul 2007 09:11:35 +0000 (09:11 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 10 Jul 2007 09:11:35 +0000 (09:11 +0000)
ext/pcre/php_pcre.c
ext/pcre/tests/bug21732.phpt

index f008c5f34bcbe470a4d9f2ddf94b06d25ce84160..b47095caae7a99a06fc3ee4ef24744c25df24b9b 100644 (file)
@@ -1422,7 +1422,9 @@ static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callabl
        }
 
        if (is_callable_replace) {
-               convert_to_text(replace);
+               if (Z_TYPE_P(replace) != IS_ARRAY) {
+                       convert_to_text(replace);
+               }
                if (!zend_is_callable(replace, 0, &callback_name)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Requires argument 2, '%R', to be a valid callback", Z_TYPE(callback_name), Z_UNIVAL(callback_name));
                        zval_dtor(&callback_name);
index 3dfc41e19fe9445f5b6ad14bee8c6f54d21a2ae2..7daf1084ab4d61660008d3f43ec558ed96ba482c 100644 (file)
@@ -27,3 +27,16 @@ array(4) {
   string(1) "e"
 }
 string(4) "yes!"
+--UEXPECT--
+bool(false)
+array(4) {
+  [0]=>
+  unicode(5) "abcde"
+  [1]=>
+  unicode(2) "ab"
+  [2]=>
+  unicode(2) "cd"
+  [3]=>
+  unicode(1) "e"
+}
+unicode(4) "yes!"