diff options
| author | Nikita Popov <nikic@php.net> | 2012-03-02 14:08:11 +0000 |
|---|---|---|
| committer | Nikita Popov <nikic@php.net> | 2012-03-02 14:08:11 +0000 |
| commit | 0dcff951828549bc7840a3de02daefcde485e335 (patch) | |
| tree | 8d2c26724a705de44d05edfdc503cd1ee3529519 | |
| parent | 503c94fc9a52227fd6c975ec98c92351c285c8f8 (diff) | |
| download | php-git-0dcff951828549bc7840a3de02daefcde485e335.tar.gz | |
Merge: Fix bug #61097: Memory leak in xmlrpc functions copying zvals
| -rw-r--r-- | NEWS | 3 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug61097.phpt | 16 | ||||
| -rw-r--r-- | ext/xmlrpc/xmlrpc-epi-php.c | 10 |
3 files changed, 23 insertions, 6 deletions
@@ -40,6 +40,9 @@ PHP NEWS . Fixed bug #61058 (array_fill leaks if start index is PHP_INT_MAX). (Laruence) +- XMLRPC: + . Fixed bug #61097 (Memory leak in xmlrpc functions copying zvals). (Nikita Popov) + 01 Mar 2012, PHP 5.4.0 - Installation: diff --git a/ext/xmlrpc/tests/bug61097.phpt b/ext/xmlrpc/tests/bug61097.phpt new file mode 100644 index 0000000000..1b75247225 --- /dev/null +++ b/ext/xmlrpc/tests/bug61097.phpt @@ -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 diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index 7fb97d21e1..13886c7537 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -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); |
