summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2012-03-03 12:46:17 +0000
committerNikita Popov <nikic@php.net>2012-03-03 12:46:17 +0000
commit3e7792aed7b6a8473e83bdb2417bbeefa009f65c (patch)
tree72b2363bbbfcbc91c2b7716c54fedfebdff7d7fd
parent37d7df72a62e9d63be6fb7eb83805a59f819bbf7 (diff)
downloadphp-git-3e7792aed7b6a8473e83bdb2417bbeefa009f65c.tar.gz
Fix bug #61264: xmlrpc_parse_method_descriptions leaks temporary variable
-rw-r--r--NEWS1
-rw-r--r--ext/xmlrpc/tests/bug61264.phpt17
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c3
3 files changed, 19 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 0a2cec1295..a379c918cf 100644
--- a/NEWS
+++ b/NEWS
@@ -73,6 +73,7 @@ PHP NEWS
- XMLRPC:
. Fixed bug #61097 (Memory leak in xmlrpc functions copying zvals). (Nikic)
+ . Fixed bug #61264 (xmlrpc_parse_method_descriptions leaks temporary variable). (Nikita Popov)
- Zlib:
. Fixed bug #61139 (gzopen leaks when specifying invalid mode). (Nikic)
diff --git a/ext/xmlrpc/tests/bug61264.phpt b/ext/xmlrpc/tests/bug61264.phpt
new file mode 100644
index 0000000000..b1da27f252
--- /dev/null
+++ b/ext/xmlrpc/tests/bug61264.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #61264: xmlrpc_parse_method_descriptions leaks temporary variable
+--FILE--
+<?php
+$xml = <<<XML
+<?xml version="1.0" encoding="utf-8"?>
+<a>
+ <b>foo</b>
+</a>
+XML;
+var_dump(xmlrpc_parse_method_descriptions($xml));
+?>
+--EXPECT--
+array(1) {
+ ["b"]=>
+ string(3) "foo"
+}
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index 13886c7537..cf5e257113 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -1240,8 +1240,7 @@ PHP_FUNCTION(xmlrpc_parse_method_descriptions)
retval = XMLRPC_to_PHP(xVal);
if (retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
+ RETVAL_ZVAL(retval, 1, 1);
}
/* dust, sweep, and mop */
XMLRPC_CleanupValue(xVal);