diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/xmlrpc/tests | |
download | php2-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.phpt | 55 | ||||
-rw-r--r-- | ext/xmlrpc/tests/002.phpt | 53 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug18916.phpt | 23 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug37057.phpt | 64 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug38431.phpt | 25 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug40576.phpt | 77 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug40576_64bit.phpt | 77 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug42189.phpt | 15 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug42736.phpt | 56 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug44996.phpt | 51 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug45226.phpt | 55 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug45555.phpt | 22 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug45556.phpt | 34 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug47818.phpt | 41 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug50282.phpt | 43 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug50285.phpt | 117 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug50761.phpt | 64 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug51288.phpt | 16 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug61097.phpt | 16 | ||||
-rw-r--r-- | ext/xmlrpc/tests/bug61264.phpt | 19 |
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" +} |