]> granicus.if.org Git - php/commitdiff
fix leak, add test
authorAntony Dovgal <tony2001@php.net>
Wed, 30 Aug 2006 16:46:23 +0000 (16:46 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 30 Aug 2006 16:46:23 +0000 (16:46 +0000)
ext/pcre/php_pcre.c
ext/pcre/tests/preg_replace_callback3.phpt [new file with mode: 0644]

index 96a28c1da1057c61e0ebfa5c214cba5e80e46975..5120fb5b49c5721391fba1adf61d12e1902b40eb 100644 (file)
@@ -1392,6 +1392,7 @@ static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callabl
                        zval_dtor(&callback_name);
                        *return_value = **subject;
                        zval_copy_ctor(return_value);
+                       INIT_PZVAL(return_value);
                        return;
                }
                zval_dtor(&callback_name);
diff --git a/ext/pcre/tests/preg_replace_callback3.phpt b/ext/pcre/tests/preg_replace_callback3.phpt
new file mode 100644 (file)
index 0000000..15d1251
--- /dev/null
@@ -0,0 +1,71 @@
+--TEST--
+preg_replace_callback() 3
+--FILE--
+<?php
+
+var_dump(preg_replace_callback());
+var_dump(preg_replace_callback(1));
+var_dump(preg_replace_callback(1,2));
+var_dump(preg_replace_callback(1,2,3));
+var_dump(preg_replace_callback(1,2,3,4));
+$a = 5;
+var_dump(preg_replace_callback(1,2,3,4,$a));
+$a = "";
+var_dump(preg_replace_callback("","","","",$a));
+$a = array();
+var_dump(preg_replace_callback($a,$a,$a,$a,$a));
+
+echo "Done\n";
+?>
+--EXPECTF--    
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in %s on line 1%d
+string(0) ""
+
+Warning: preg_replace_callback(): Requires argument 2, 'Array', to be a valid callback in %s on line %d
+array(0) {
+}
+Done
+--UEXPECTF--
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+NULL
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
+int(3)
+
+Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in %s on line %d
+unicode(0) ""
+
+Warning: preg_replace_callback(): Requires argument 2, 'Array', to be a valid callback in %s on line %d
+array(0) {
+}
+Done