tony2001 Mon Aug 14 08:15:44 2006 UTC
Added files:
/php-src/ext/xmlrpc/tests 001.phpt 002.phpt
Modified files:
/php-src/ext/xmlrpc xmlrpc-epi-php.c
Log:
fix segfault and leak in ext/xmlrpc
add tests
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/xmlrpc-epi-php.c?r1=1.45&r2=1.46&diff_format=u
Index: php-src/ext/xmlrpc/xmlrpc-epi-php.c
diff -u php-src/ext/xmlrpc/xmlrpc-epi-php.c:1.45
php-src/ext/xmlrpc/xmlrpc-epi-php.c:1.46
--- php-src/ext/xmlrpc/xmlrpc-epi-php.c:1.45 Fri Aug 11 17:41:49 2006
+++ php-src/ext/xmlrpc/xmlrpc-epi-php.c Mon Aug 14 08:15:44 2006
@@ -51,7 +51,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xmlrpc-epi-php.c,v 1.45 2006/08/11 17:41:49 tony2001 Exp $ */
+/* $Id: xmlrpc-epi-php.c,v 1.46 2006/08/14 08:15:44 tony2001 Exp $ */
/**********************************************************************
* BUGS: *
@@ -670,6 +670,7 @@
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 @@
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));
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/tests/001.phpt?view=markup&rev=1.1
Index: php-src/ext/xmlrpc/tests/001.phpt
+++ php-src/ext/xmlrpc/tests/001.phpt
--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
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/tests/002.phpt?view=markup&rev=1.1
Index: php-src/ext/xmlrpc/tests/002.phpt
+++ php-src/ext/xmlrpc/tests/002.phpt
--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
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php