Browse Source

fix segfault and leak in ext/xmlrpc

add tests
migration/RELEASE_1_0_0
Antony Dovgal 20 years ago
parent
commit
cf400175ea
  1. 66
      ext/xmlrpc/tests/001.phpt
  2. 56
      ext/xmlrpc/tests/002.phpt
  3. 3
      ext/xmlrpc/xmlrpc-epi-php.c

66
ext/xmlrpc/tests/001.phpt

@ -0,0 +1,66 @@
--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>
"
Notice: Array to string conversion in %s on line %d
string(177) "<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>Array</methodName>
<params>
<param>
<value>
<int>1</int>
</value>
</param>
</params>
</methodCall>
"
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

56
ext/xmlrpc/tests/002.phpt

@ -0,0 +1,56 @@
--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"
Notice: Array to string conversion in %s on line %d
array(1) {
[0]=>
int(1)
}
string(5) "Array"
Done

3
ext/xmlrpc/xmlrpc-epi-php.c

@ -670,6 +670,7 @@ PHP_FUNCTION(xmlrpc_encode_request)
if (Z_TYPE_PP(method) == IS_NULL) {
XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_response);
} else {
convert_to_string_ex(method);
XMLRPC_RequestSetMethodName(xRequest, Z_STRVAL_PP(method));
XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_call);
}
@ -739,7 +740,7 @@ zval* decode_request_worker (zval* xml_in, zval* encoding_in, zval* method_name_
if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
if(method_name_out) {
convert_to_string(method_name_out);
zval_dtor(method_name_out);
Z_TYPE_P(method_name_out) = IS_STRING;
Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));

Loading…
Cancel
Save