PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Web Services » XML_RPC » Bug #4032

Failure to ret. XML_RPC_Response obj. in XML-RPC server results in fatal error

Details

Request #4032Failure to ret. XML_RPC_Response obj. in XML-RPC server results in fatal error
Submitted2005-04-02 16:14 UTC
Fromphp at ceruleansky dot com
Assigneddanielc
StatusClosed
PackageXML_RPC
PHP Version5.0.2
OSWindows XP Home
Roadmaps(Not assigned)

Comments

[2005-04-02 16:14 UTC] php at ceruleansky dot com

Description:
------------
XML-RPC Version: 1.17

If you use the XML_RPC package for an XML-RPC server, and you fail to return an XML_RPC_Response object from a function found in the dispatch map, the following fatal error text is sent to the XML_RPC client, resulting in an XML parse error on the client side:

<br />
<b>Fatal error</b>: Call to a member function serialize() on a non-object in <b>c:\apachefriends\xampp\php\pear\XML\RPC\Server.php</b> on line <b>323</b><br />

It seems the code responsible for this fatal error is found in RPC/Server.php:

$payload = '<?xml version="1.0" encoding="'
. $this->encoding . '"?>' . "\n"
. $this->serializeDebug()
. $r->serialize();

It is the $r->serialize() part that is causing it.

Reproduce code:
---------------
<?php
require 'XML/RPC/Server.php'; // PEAR XML-RPC library
function echothis($xmlrpcdata)
{
$hellostr = XML_RPC_decode($xmlrpcdata->params[0]);
$hellostr = 'The text you submitted said was: ' . $hellostr;
$retval = XML_RPC_encode($hellostr);
// return new XML_RPC_Response($retval);
}
$dispatch_map = array( 'echoEcho' => array('function' => 'echothis') );
$server = new XML_RPC_Server($dispatch_map); // Start the server
?>
Client XML post:
<?xml version="1.0"?>
<methodCall>
<methodName>echoEcho</methodName>
<params>
<param><value><string>Please echo this text.</string></value></param>
</params>
</methodCall>

Expected result:
----------------
HTTP response by the server should have been an XML-RPC fault:

<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>1000</int></value>
</member>
<member>
<name>faultString</name>
<value><string>XML-RPC Error: XML_RPC_Response object not returned by XML-RPC server.</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>

Actual result:
--------------
<br />
<b>Parse error</b>: syntax error, unexpected T_STRING in <b>C:\apachefriends\xampp\htdocs\mailingdb2\minimal_server.php</b> on line <b>14</b><br />

[2005-04-02 16:17 UTC] php at ceruleansky dot com

Oops:
I made an error in the part where I listed the actual result.
It should be:
<br />
<b>Fatal error</b>: Call to a member function serialize() on a non-object in <b>c:\apachefriends\xampp\php\pear\XML\RPC\Server.php</b> on line <b>323</b><br />