From c23f8f11345a6a264bbef4f92f7763c2fdb8fc66 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 2 Apr 2009 15:52:57 +0000 Subject: [PATCH] - MFH: Fixed bug #47818 (Segfault due to bound callback param) --- ext/xmlrpc/tests/bug47818.phpt | 39 ++++++++++++++++++++++++++++++++++ ext/xmlrpc/xmlrpc-epi-php.c | 4 ++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 ext/xmlrpc/tests/bug47818.phpt diff --git a/ext/xmlrpc/tests/bug47818.phpt b/ext/xmlrpc/tests/bug47818.phpt new file mode 100644 index 0000000000..57e1090303 --- /dev/null +++ b/ext/xmlrpc/tests/bug47818.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #47818 (Segfault due to bound callback param) +--FILE-- +method = $method_name; + print "Inside impl(): {$this->method}\n"; + return array_sum($params); + } + + function __construct() { + $this->s = xmlrpc_server_create(); + xmlrpc_server_register_method($this->s, 'add', array($this, 'impl')); + } + + function call($req) { + return xmlrpc_server_call_method($this->s, $req, null); + } + + function getMethod() {return $this->method;} + +} + +$x = new MyXmlRpc; +$resp = $x->call(xmlrpc_encode_request('add', array(1, 2, 3))); + +$method = $x->getMethod(); + +print "Global scope: $method\n"; + +?> +--EXPECTF-- +Inside impl(): add +Global scope: add diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index e365b76142..d3742e8cc3 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -1157,8 +1157,8 @@ PHP_FUNCTION(xmlrpc_server_call_method) } /* cleanup after ourselves. what a sty! */ - zval_dtor(data.xmlrpc_method); - FREE_ZVAL(data.xmlrpc_method); + zval_ptr_dtor(&data.xmlrpc_method); + zval_dtor(data.return_data); FREE_ZVAL(data.return_data); -- 2.40.0