]> granicus.if.org Git - php/commitdiff
fix #42736 (xmlrpc_server_call_method() crashes)
authorAntony Dovgal <tony2001@php.net>
Mon, 12 Nov 2007 11:22:00 +0000 (11:22 +0000)
committerAntony Dovgal <tony2001@php.net>
Mon, 12 Nov 2007 11:22:00 +0000 (11:22 +0000)
ext/xmlrpc/tests/bug42736.phpt [new file with mode: 0644]
ext/xmlrpc/xmlrpc-epi-php.c

diff --git a/ext/xmlrpc/tests/bug42736.phpt b/ext/xmlrpc/tests/bug42736.phpt
new file mode 100644 (file)
index 0000000..b9a46cf
--- /dev/null
@@ -0,0 +1,56 @@
+--TEST--
+Bug #42736 (xmlrpc_server_call_method() crashes)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+class SOAP_Array {
+       public function get($id){
+               return $this->add($id);
+       }
+}
+
+$xml = xmlrpc_server_create();
+
+$Myrequest = '<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>GetProducts</methodName><params><param><value><dateTime.iso8601>20060922T14:26:19</dateTime.iso8601></value></param></params></methodCall>';
+
+class MyClass {
+       function GetProducts($dummy, $time){
+               return array('faultString' => $time);
+       }
+}
+$myclass =  new MyClass();
+xmlrpc_server_register_method($xml, 'GetProducts', array($myclass, 'GetProducts'));
+$response = xmlrpc_server_call_method($xml, $Myrequest, null);
+
+var_dump($response);
+
+echo "Done\n";
+?>
+--EXPECTF--    
+string(402) "<?xml version="1.0" encoding="iso-8859-1"?>
+<methodResponse>
+<params>
+ <param>
+  <value>
+   <struct>
+    <member>
+     <name>faultString</name>
+     <value>
+      <array>
+       <data>
+        <value>
+         <dateTime.iso8601>20060922T14:26:19</dateTime.iso8601>
+        </value>
+       </data>
+      </array>
+     </value>
+    </member>
+   </struct>
+  </value>
+ </param>
+</params>
+</methodResponse>
+"
+Done
index 8209dd43397b4a55e4af3fe4f7268a65d45c2ad0..1db5a832d1e9d19e9b2e6e47e7e6ce3313bc73c4 100644 (file)
@@ -864,8 +864,7 @@ static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRe
 
        pData->php_executed = 1;
 
-       zval_dtor(xmlrpc_params);
-       FREE_ZVAL(xmlrpc_params);
+       zval_ptr_dtor(&xmlrpc_params);
 
        return NULL;
 }