summaryrefslogtreecommitdiff
path: root/ext/xmlrpc/tests
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/xmlrpc/tests
downloadphp2-master.tar.gz
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/xmlrpc/tests')
-rw-r--r--ext/xmlrpc/tests/001.phpt55
-rw-r--r--ext/xmlrpc/tests/002.phpt53
-rw-r--r--ext/xmlrpc/tests/bug18916.phpt23
-rw-r--r--ext/xmlrpc/tests/bug37057.phpt64
-rw-r--r--ext/xmlrpc/tests/bug38431.phpt25
-rw-r--r--ext/xmlrpc/tests/bug40576.phpt77
-rw-r--r--ext/xmlrpc/tests/bug40576_64bit.phpt77
-rw-r--r--ext/xmlrpc/tests/bug42189.phpt15
-rw-r--r--ext/xmlrpc/tests/bug42736.phpt56
-rw-r--r--ext/xmlrpc/tests/bug44996.phpt51
-rw-r--r--ext/xmlrpc/tests/bug45226.phpt55
-rw-r--r--ext/xmlrpc/tests/bug45555.phpt22
-rw-r--r--ext/xmlrpc/tests/bug45556.phpt34
-rw-r--r--ext/xmlrpc/tests/bug47818.phpt41
-rw-r--r--ext/xmlrpc/tests/bug50282.phpt43
-rw-r--r--ext/xmlrpc/tests/bug50285.phpt117
-rw-r--r--ext/xmlrpc/tests/bug50761.phpt64
-rw-r--r--ext/xmlrpc/tests/bug51288.phpt16
-rw-r--r--ext/xmlrpc/tests/bug61097.phpt16
-rw-r--r--ext/xmlrpc/tests/bug61264.phpt19
20 files changed, 923 insertions, 0 deletions
diff --git a/ext/xmlrpc/tests/001.phpt b/ext/xmlrpc/tests/001.phpt
new file mode 100644
index 0000000..2625096
--- /dev/null
+++ b/ext/xmlrpc/tests/001.phpt
@@ -0,0 +1,55 @@
+--TEST--
+xmlrpc_encode_request() with wrong arguments
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+var_dump(xmlrpc_encode_request(-1, 1));
+var_dump(xmlrpc_encode_request("", 1));
+var_dump(xmlrpc_encode_request(array(), 1));
+var_dump(xmlrpc_encode_request(3.4, 1));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(174) "<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>-1</methodName>
+<params>
+ <param>
+ <value>
+ <int>1</int>
+ </value>
+ </param>
+</params>
+</methodCall>
+"
+string(160) "<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName/>
+<params>
+ <param>
+ <value>
+ <int>1</int>
+ </value>
+ </param>
+</params>
+</methodCall>
+"
+
+Warning: xmlrpc_encode_request() expects parameter 1 to be string, array given in %s on line %d
+NULL
+string(175) "<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>3.4</methodName>
+<params>
+ <param>
+ <value>
+ <int>1</int>
+ </value>
+ </param>
+</params>
+</methodCall>
+"
+Done
diff --git a/ext/xmlrpc/tests/002.phpt b/ext/xmlrpc/tests/002.phpt
new file mode 100644
index 0000000..8358646
--- /dev/null
+++ b/ext/xmlrpc/tests/002.phpt
@@ -0,0 +1,53 @@
+--TEST--
+xmlrpc_encode_request() and various arguments
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+$r = xmlrpc_encode_request("method", array());
+var_dump(xmlrpc_decode_request($r, $method));
+var_dump($method);
+
+$r = xmlrpc_encode_request("method", 1);
+var_dump(xmlrpc_decode_request($r, $method));
+var_dump($method);
+
+$r = xmlrpc_encode_request("method", 'param');
+var_dump(xmlrpc_decode_request($r, $method));
+var_dump($method);
+
+$r = xmlrpc_encode_request(-1, "");
+var_dump(xmlrpc_decode_request($r, $method));
+var_dump($method);
+
+$r = xmlrpc_encode_request(array(), 1);
+var_dump(xmlrpc_decode_request($r, $method));
+var_dump($method);
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(0) {
+}
+string(6) "method"
+array(1) {
+ [0]=>
+ int(1)
+}
+string(6) "method"
+array(1) {
+ [0]=>
+ string(5) "param"
+}
+string(6) "method"
+array(1) {
+ [0]=>
+ string(0) ""
+}
+string(2) "-1"
+
+Warning: xmlrpc_encode_request() expects parameter 1 to be string, array given in %s on line %d
+NULL
+string(2) "-1"
+Done
diff --git a/ext/xmlrpc/tests/bug18916.phpt b/ext/xmlrpc/tests/bug18916.phpt
new file mode 100644
index 0000000..487838b
--- /dev/null
+++ b/ext/xmlrpc/tests/bug18916.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #18916 (xmlrpc_set_type() not working)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--INI--
+date.timezone="America/Sao_Paulo"
+--FILE--
+<?php
+
+$params = date("Ymd\TH:i:s", time());
+xmlrpc_set_type($params, 'datetime');
+echo xmlrpc_encode($params);
+
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <dateTime.iso8601>%dT%d:%d:%d</dateTime.iso8601>
+ </value>
+</param>
+</params>
diff --git a/ext/xmlrpc/tests/bug37057.phpt b/ext/xmlrpc/tests/bug37057.phpt
new file mode 100644
index 0000000..013cc91
--- /dev/null
+++ b/ext/xmlrpc/tests/bug37057.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Bug #37057 (xmlrpc_decode() may produce arrays with numeric string keys which are unaccessible)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+$response='<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>50</name>
+ <value><string>0.29</string></value>
+ </member>
+ </struct>
+ </value>
+ </param>
+ </params>
+</methodResponse>';
+
+$retval=xmlrpc_decode($response);
+var_dump($retval);
+var_dump($retval["50"]);
+var_dump($retval[50]);
+
+$response='<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>0</name>
+ <value><string>0.29</string></value>
+ </member>
+ </struct>
+ </value>
+ </param>
+ </params>
+</methodResponse>';
+
+$retval=xmlrpc_decode($response);
+var_dump($retval);
+var_dump($retval["0"]);
+var_dump($retval[0]);
+
+echo "Done\n";
+?>
+--EXPECT--
+array(1) {
+ [50]=>
+ string(4) "0.29"
+}
+string(4) "0.29"
+string(4) "0.29"
+array(1) {
+ [0]=>
+ string(4) "0.29"
+}
+string(4) "0.29"
+string(4) "0.29"
+Done
diff --git a/ext/xmlrpc/tests/bug38431.phpt b/ext/xmlrpc/tests/bug38431.phpt
new file mode 100644
index 0000000..288fe10
--- /dev/null
+++ b/ext/xmlrpc/tests/bug38431.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #38431 (xmlrpc_get_type() crashes PHP on objects)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+var_dump(xmlrpc_get_type(new stdclass));
+var_dump(xmlrpc_get_type(array()));
+$var = array(1,2,3);
+var_dump(xmlrpc_get_type($var));
+$var = array("test"=>1,2,3);
+var_dump(xmlrpc_get_type($var));
+$var = array("test"=>1,"test2"=>2);
+var_dump(xmlrpc_get_type($var));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(5) "array"
+string(5) "array"
+string(5) "array"
+string(5) "mixed"
+string(6) "struct"
+Done
diff --git a/ext/xmlrpc/tests/bug40576.phpt b/ext/xmlrpc/tests/bug40576.phpt
new file mode 100644
index 0000000..404aba3
--- /dev/null
+++ b/ext/xmlrpc/tests/bug40576.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Bug #40576 (double values are truncated to 6 decimal digits when encoding)
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlrpc")) print "skip";
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--INI--
+precision=12
+--FILE--
+<?php
+
+var_dump(xmlrpc_encode(1.123456789));
+var_dump(xmlrpc_encode(11234567891010));
+var_dump(xmlrpc_encode(11234567));
+var_dump(xmlrpc_encode(""));
+var_dump(xmlrpc_encode("test"));
+var_dump(xmlrpc_encode("1.22222222222222222222222"));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(125) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <double>1.123456789</double>
+ </value>
+</param>
+</params>
+"
+string(130) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <double>1.1234567891E+13</double>
+ </value>
+</param>
+</params>
+"
+string(116) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <int>11234567</int>
+ </value>
+</param>
+</params>
+"
+string(106) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string/>
+ </value>
+</param>
+</params>
+"
+string(118) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string>test</string>
+ </value>
+</param>
+</params>
+"
+string(139) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string>1.22222222222222222222222</string>
+ </value>
+</param>
+</params>
+"
+Done
diff --git a/ext/xmlrpc/tests/bug40576_64bit.phpt b/ext/xmlrpc/tests/bug40576_64bit.phpt
new file mode 100644
index 0000000..bb4cbe7
--- /dev/null
+++ b/ext/xmlrpc/tests/bug40576_64bit.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Bug #40576 (double values are truncated to 6 decimal digits when encoding)
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlrpc")) print "skip";
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--INI--
+precision=12
+--FILE--
+<?php
+
+var_dump(xmlrpc_encode(1.123456789));
+var_dump(xmlrpc_encode(11234567891010));
+var_dump(xmlrpc_encode(11234567));
+var_dump(xmlrpc_encode(""));
+var_dump(xmlrpc_encode("test"));
+var_dump(xmlrpc_encode("1.22222222222222222222222"));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(125) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <double>1.123456789</double>
+ </value>
+</param>
+</params>
+"
+string(119) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <int>-1066555326</int>
+ </value>
+</param>
+</params>
+"
+string(116) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <int>11234567</int>
+ </value>
+</param>
+</params>
+"
+string(106) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string/>
+ </value>
+</param>
+</params>
+"
+string(118) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string>test</string>
+ </value>
+</param>
+</params>
+"
+string(139) "<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <string>1.22222222222222222222222</string>
+ </value>
+</param>
+</params>
+"
+Done
diff --git a/ext/xmlrpc/tests/bug42189.phpt b/ext/xmlrpc/tests/bug42189.phpt
new file mode 100644
index 0000000..55e726c
--- /dev/null
+++ b/ext/xmlrpc/tests/bug42189.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #42189 (xmlrpc_get_type() crashes PHP on invalid dates)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+$a = '~~~~~~~~~~~~~~~~~~';
+$ok = xmlrpc_set_type($a, 'datetime');
+var_dump($ok);
+
+echo "Done\n";
+?>
+--EXPECT--
+bool(false)
+Done
diff --git a/ext/xmlrpc/tests/bug42736.phpt b/ext/xmlrpc/tests/bug42736.phpt
new file mode 100644
index 0000000..b9a46cf
--- /dev/null
+++ b/ext/xmlrpc/tests/bug42736.phpt
@@ -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
diff --git a/ext/xmlrpc/tests/bug44996.phpt b/ext/xmlrpc/tests/bug44996.phpt
new file mode 100644
index 0000000..0f4d016
--- /dev/null
+++ b/ext/xmlrpc/tests/bug44996.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Bug #44996 (xmlrpc_decode() ignores time zone on iso8601.datetime)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+function DecodeDatetime($datetime) {
+ print "\nISO 8601 datetime $datetime\n";
+ $obj = xmlrpc_decode("<?xml version=\"1.0\"?><methodResponse><params><param><value><dateTime.iso8601>$datetime</dateTime.iso8601></value></param></params></methodResponse>");
+ print_r($obj);
+}
+
+DecodeDatetime("20010909T01:46:40Z");
+DecodeDatetime("20010909T00:46:40-01");
+DecodeDatetime("2001-09-09T08:46:40+07:00");
+DecodeDatetime("2001-09-08T21:46:40-0400");
+
+?>
+--EXPECT--
+ISO 8601 datetime 20010909T01:46:40Z
+stdClass Object
+(
+ [scalar] => 20010909T01:46:40Z
+ [xmlrpc_type] => datetime
+ [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 20010909T00:46:40-01
+stdClass Object
+(
+ [scalar] => 20010909T00:46:40-01
+ [xmlrpc_type] => datetime
+ [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 2001-09-09T08:46:40+07:00
+stdClass Object
+(
+ [scalar] => 2001-09-09T08:46:40+07:00
+ [xmlrpc_type] => datetime
+ [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 2001-09-08T21:46:40-0400
+stdClass Object
+(
+ [scalar] => 2001-09-08T21:46:40-0400
+ [xmlrpc_type] => datetime
+ [timestamp] => 1000000000
+)
diff --git a/ext/xmlrpc/tests/bug45226.phpt b/ext/xmlrpc/tests/bug45226.phpt
new file mode 100644
index 0000000..e053850
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45226.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Bug #45226 (xmlrpc_set_type() segfaults with valid ISO8601 date string)
+--INI--
+date.timezone="America/Sao_Paulo"
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+$d = date(DATE_ISO8601);
+xmlrpc_set_type($d, 'datetime');
+echo xmlrpc_encode_request('method.call', array('date' => $d));
+
+$d = '2008-01-01 20:00:00';
+xmlrpc_set_type($d, 'datetime');
+echo xmlrpc_encode_request('method.call', array('date' => $d));
+
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>method.call</methodName>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>date</name>
+ <value>
+ <dateTime.iso8601>%d-%d-%dT%d:%d:%d%s%d</dateTime.iso8601>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodCall>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>method.call</methodName>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>date</name>
+ <value>
+ <dateTime.iso8601>%d-%d-%d %d:%d:%d</dateTime.iso8601>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodCall>
diff --git a/ext/xmlrpc/tests/bug45555.phpt b/ext/xmlrpc/tests/bug45555.phpt
new file mode 100644
index 0000000..6b3da24
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45555.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #45555 (Segfault with invalid non-string as register_introspection_callback)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+$options = array ();
+$request = xmlrpc_encode_request ("system.describeMethods", $options);
+$server = xmlrpc_server_create ();
+
+xmlrpc_server_register_introspection_callback($server, 1);
+xmlrpc_server_register_introspection_callback($server, array('foo', 'bar'));
+
+$options = array ('output_type' => 'xml', 'version' => 'xmlrpc');
+xmlrpc_server_call_method ($server, $request, NULL, $options);
+
+?>
+--EXPECTF--
+Warning: xmlrpc_server_call_method(): Invalid callback '1' passed in %s on line %d
+
+Warning: xmlrpc_server_call_method(): Invalid callback 'foo::bar' passed in %s on line %d
diff --git a/ext/xmlrpc/tests/bug45556.phpt b/ext/xmlrpc/tests/bug45556.phpt
new file mode 100644
index 0000000..34897d8
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45556.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #45556 (Return value from callback isn't freed)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+$options = array ();
+$request = xmlrpc_encode_request ("system.describeMethods", $options);
+$server = xmlrpc_server_create ();
+
+
+function foo() { return 11111; }
+
+class bar {
+ static public function test() {
+ return 'foo';
+ }
+}
+
+xmlrpc_server_register_introspection_callback($server, 'foobar');
+xmlrpc_server_register_introspection_callback($server, array('bar', 'test'));
+xmlrpc_server_register_introspection_callback($server, array('foo', 'bar'));
+
+$options = array ('output_type' => 'xml', 'version' => 'xmlrpc');
+xmlrpc_server_call_method ($server, $request, NULL, $options);
+
+?>
+--EXPECTF--
+Warning: xmlrpc_server_call_method(): Invalid callback 'foobar' passed in %s on line %d
+
+Warning: xmlrpc_server_call_method(): xml parse error: [line 1, column 1, message: Invalid document end] Unable to add introspection data returned from bar::test() in %s on line %d
+
+Warning: xmlrpc_server_call_method(): Invalid callback 'foo::bar' passed in %s on line %d
diff --git a/ext/xmlrpc/tests/bug47818.phpt b/ext/xmlrpc/tests/bug47818.phpt
new file mode 100644
index 0000000..a2944d8
--- /dev/null
+++ b/ext/xmlrpc/tests/bug47818.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Bug #47818 (Segfault due to bound callback param)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+class MyXmlRpc {
+ private $s;
+ private $method;
+
+ function impl($method_name, $params, $user_data){
+ $this->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/tests/bug50282.phpt b/ext/xmlrpc/tests/bug50282.phpt
new file mode 100644
index 0000000..eb35fe3
--- /dev/null
+++ b/ext/xmlrpc/tests/bug50282.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #50282 (xmlrpc_encode_request() changes object into array in calling function)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+class One { var $x = 10; }
+
+$o = new One();
+var_dump($o);
+var_dump(xmlrpc_encode_request('test', $o));
+var_dump($o);
+
+?>
+--EXPECTF--
+object(One)#%d (1) {
+ ["x"]=>
+ int(10)
+}
+string(279) "<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>test</methodName>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>x</name>
+ <value>
+ <int>10</int>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodCall>
+"
+object(One)#%d (1) {
+ ["x"]=>
+ int(10)
+}
diff --git a/ext/xmlrpc/tests/bug50285.phpt b/ext/xmlrpc/tests/bug50285.phpt
new file mode 100644
index 0000000..5da803c
--- /dev/null
+++ b/ext/xmlrpc/tests/bug50285.phpt
@@ -0,0 +1,117 @@
+--TEST--
+Bug #50285 (xmlrpc does not preserve keys in encoded indexed arrays)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+
+function test1($func, $params) {
+ return array(1=>'One', 3=>'Three', 5=>'Five');
+}
+
+function test2($func, $params) {
+ return array('One', 'Three', 'Five', 5);
+}
+
+function test3($func, $params) {
+ return array('One', 3 => 'Three', b'Five' => 5, 'Six');
+}
+
+function test4($func, $params) {
+ return array('One', 'Three', 'Five', b'Six' => 6);
+}
+
+$server = xmlrpc_server_create();
+$result = xmlrpc_server_register_method($server, 'test1', 'test1');
+$HTTP_RAW_POST_DATA = <<<EOD
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall>
+<methodName>test1</methodName>
+<params />
+</methodCall>
+EOD;
+$response = xmlrpc_server_call_method($server, $HTTP_RAW_POST_DATA, null);
+var_dump(xmlrpc_decode($response));
+
+// ------------
+
+$server = xmlrpc_server_create();
+$result = xmlrpc_server_register_method($server, 'test2', 'test2');
+$HTTP_RAW_POST_DATA = <<<EOD
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall>
+<methodName>test2</methodName>
+<params />
+</methodCall>
+EOD;
+$response = xmlrpc_server_call_method($server, $HTTP_RAW_POST_DATA, null);
+var_dump(xmlrpc_decode($response));
+
+// ------------
+
+$server = xmlrpc_server_create();
+$result = xmlrpc_server_register_method($server, 'test3', 'test3');
+$HTTP_RAW_POST_DATA = <<<EOD
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall>
+<methodName>test3</methodName>
+<params />
+</methodCall>
+EOD;
+$response = xmlrpc_server_call_method($server, $HTTP_RAW_POST_DATA, null);
+var_dump(xmlrpc_decode($response));
+
+// ------------
+
+$server = xmlrpc_server_create();
+$result = xmlrpc_server_register_method($server, 'test4', 'test4');
+$HTTP_RAW_POST_DATA = <<<EOD
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall>
+<methodName>test4</methodName>
+<params />
+</methodCall>
+EOD;
+$response = xmlrpc_server_call_method($server, $HTTP_RAW_POST_DATA, null);
+var_dump(xmlrpc_decode($response));
+
+?>
+--EXPECT--
+array(3) {
+ [1]=>
+ string(3) "One"
+ [3]=>
+ string(5) "Three"
+ [5]=>
+ string(4) "Five"
+}
+array(4) {
+ [0]=>
+ string(3) "One"
+ [1]=>
+ string(5) "Three"
+ [2]=>
+ string(4) "Five"
+ [3]=>
+ int(5)
+}
+array(4) {
+ [0]=>
+ string(3) "One"
+ [3]=>
+ string(5) "Three"
+ ["Five"]=>
+ int(5)
+ [4]=>
+ string(3) "Six"
+}
+array(4) {
+ [0]=>
+ string(3) "One"
+ [1]=>
+ string(5) "Three"
+ [2]=>
+ string(4) "Five"
+ ["Six"]=>
+ int(6)
+}
diff --git a/ext/xmlrpc/tests/bug50761.phpt b/ext/xmlrpc/tests/bug50761.phpt
new file mode 100644
index 0000000..ada1940
--- /dev/null
+++ b/ext/xmlrpc/tests/bug50761.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Bug #50761 (system.multiCall crashes)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+$req = '<?xml version="1.0"?>
+<methodCall>
+<methodName>system.multiCall</methodName>
+<params><param><value><array><data>
+<value><struct>
+<member><name>methodName</name><value><string>testMethodA</string></value></member>
+<member><name>params</name><value><array><data><value><string>A</string>
+</value></data></array></value></member>
+</struct></value>
+<value><struct>
+<member><name>methodName</name><value><string>testMethodB</string></value></member>
+<member><name>params</name><value><array><data><value><string>B</string>
+</value></data></array></value></member>
+</struct></value>
+</data></array></value></param></params>
+</methodCall>';
+
+function testA($methodName, $params, $var){ return "C"; }
+function testB($methodName, $params, $var){ return "D"; }
+
+$server = xmlrpc_server_create();
+xmlrpc_server_register_method($server, 'testMethodA', 'testA');
+xmlrpc_server_register_method($server, 'testMethodB', 'testB');
+$res = xmlrpc_server_call_method($server, $req, null);
+echo $res;
+?>
+--EXPECT--
+<?xml version="1.0" encoding="iso-8859-1"?>
+<methodResponse>
+<params>
+ <param>
+ <value>
+ <array>
+ <data>
+ <value>
+ <array>
+ <data>
+ <value>
+ <string>C</string>
+ </value>
+ </data>
+ </array>
+ </value>
+ <value>
+ <array>
+ <data>
+ <value>
+ <string>D</string>
+ </value>
+ </data>
+ </array>
+ </value>
+ </data>
+ </array>
+ </value>
+ </param>
+</params>
+</methodResponse>
diff --git a/ext/xmlrpc/tests/bug51288.phpt b/ext/xmlrpc/tests/bug51288.phpt
new file mode 100644
index 0000000..ba34136
--- /dev/null
+++ b/ext/xmlrpc/tests/bug51288.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #51288 (CVE-2010-0397, NULL pointer deref when no <methodName> in request)
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--FILE--
+<?php
+$method = NULL;
+$req = '<?xml version="1.0"?><methodCall></methodCall>';
+var_dump(xmlrpc_decode_request($req, $method));
+var_dump($method);
+echo "Done\n";
+?>
+--EXPECT--
+NULL
+NULL
+Done
diff --git a/ext/xmlrpc/tests/bug61097.phpt b/ext/xmlrpc/tests/bug61097.phpt
new file mode 100644
index 0000000..1b75247
--- /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/tests/bug61264.phpt b/ext/xmlrpc/tests/bug61264.phpt
new file mode 100644
index 0000000..24e4b27
--- /dev/null
+++ b/ext/xmlrpc/tests/bug61264.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #61264: xmlrpc_parse_method_descriptions leaks temporary variable
+--SKIPIF--
+<?php if (!extension_loaded("xmlrpc")) print "skip"; ?>
+--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"
+}