]> granicus.if.org Git - php/commitdiff
Fix bug #61097 Memory leak in xmlrpc functions copying zvals
authorNikita Popov <nikic@php.net>
Sat, 18 Feb 2012 14:58:19 +0000 (14:58 +0000)
committerNikita Popov <nikic@php.net>
Sat, 18 Feb 2012 14:58:19 +0000 (14:58 +0000)
Needs to be merged to 5.4.

ext/xmlrpc/tests/bug61097.phpt [new file with mode: 0644]
ext/xmlrpc/xmlrpc-epi-php.c

diff --git a/ext/xmlrpc/tests/bug61097.phpt b/ext/xmlrpc/tests/bug61097.phpt
new file mode 100644 (file)
index 0000000..1b75247
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Bug #61097 (Memory leak in xmlrpc functions copying zvals)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+$server = xmlrpc_server_create();
+
+$method = 'abc';
+xmlrpc_server_register_introspection_callback($server, $method);
+xmlrpc_server_register_method($server, 'abc', $method);
+
+echo 'Done';
+?>
+--EXPECT--
+Done
index 7fb97d21e1d7fcecf2d4b7e4e1fdee67da16e3dc..13886c75373949304d8c7dc2c0fe9ef23db231c2 100644 (file)
@@ -1043,9 +1043,8 @@ PHP_FUNCTION(xmlrpc_server_register_method)
                 */
                if (XMLRPC_ServerRegisterMethod(server->server_ptr, method_key, php_xmlrpc_callback)) {
                        /* save for later use */
-                       MAKE_STD_ZVAL(method_name_save);
-                       *method_name_save = **method_name;
-                       zval_copy_ctor(method_name_save);
+                       ALLOC_ZVAL(method_name_save);
+                       MAKE_COPY_ZVAL(method_name, method_name_save);
 
                        /* register our php method */
                        add_zval(server->method_map, method_key, &method_name_save);
@@ -1073,9 +1072,8 @@ PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
 
        if (type == le_xmlrpc_server) {
                /* save for later use */
-               MAKE_STD_ZVAL(method_name_save);
-               *method_name_save = **method_name;
-               zval_copy_ctor(method_name_save);
+               ALLOC_ZVAL(method_name_save);
+               MAKE_COPY_ZVAL(method_name, method_name_save);
 
                /* register our php method */
                add_zval(server->introspection_map, NULL, &method_name_save);