Bug #70526 [Com]: xmlrpc_set_type returns false on success
| From: | rainer dot jung at kippdata dot de | Date: | Fri, 18 Sep 2015 20:13:59 +0000 |
| Subject: | Bug #70526 [Com]: xmlrpc_set_type returns false on success | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-196077@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70526&edit=1
ID: 70526
Comment by: rainer dot jung at kippdata dot de
Reported by: rainer dot jung at kippdata dot de
Summary: xmlrpc_set_type returns false on success
Status: Open
Type: Bug
Package: XMLRPC-EPI related
Operating System: Any
PHP Version: 7.0.0RC3
Block user comment: N
Private report: N
New Comment:
The NULL check is there, but it is wrong. If the return value is not NULL, it assigns 1 to bSuccess
instead of SUCCESS==0. Please check the attached patch. Thanks!
Previous Comments:
------------------------------------------------------------------------
[2015-09-18 20:00:59] rainer dot jung at kippdata dot de
The return value of xmlrpc_set_type() comes from set_zval_xmlrpc_type() in
ext/xmlrpc/xmlrpc-epi-php.c. That function sets the return value in the variable bSuccess which is
filled in PHP 7 with the return value of zend_hash_str_update(). This function returns in PHP 7 a
zval*, not SUCCESS or FAILURE as needed by this code. Until 5.6 bSuccess was filled with the return
value of zend_hash_update() which indeed does return SUCCESS or FAILURE.
It seems zend_hash_str_update() has no way of returning an error, so maybe you could set bSuccess
always to SUCCESS if the code in set_zval_xmlrpc_type() gets as far as calling
zend_hash_str_update() (and maybe doesn't return NULL).
------------------------------------------------------------------------
[2015-09-18 19:41:12] rainer dot jung at kippdata dot de
Corrected "Package" in Bug metadata.
------------------------------------------------------------------------
[2015-09-18 19:23:45] rainer dot jung at kippdata dot de
Description:
------------
xmlrpc_set_type() returns false on success. By documentation under
http://php.net/manual/en/function.xmlrpc-set-type.php
it should return true on success. This is correct for PHP until 5.6(.13), but no longer correct for
PHP 7.
Test script:
---------------
<?php
$params = date("Ymd\TH:i:s", time());
$rv = xmlrpc_set_type($params, 'datetime');
echo "xmlrpc_encode of result:\n";
echo xmlrpc_encode($params);
echo "\nvar_dump of return value:\n";
var_dump($rv);
echo "\nvar_dump of result:\n";
var_dump($params);
?>
Expected result:
----------------
xmlrpc_encode of result:
<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
<value>
<dateTime.iso8601>20150918T19:16:44</dateTime.iso8601>
</value>
</param>
</params>
var_dump of return value:
bool(true)
var_dump of result:
object(stdClass)#1 (3) {
["scalar"]=>
string(17) "20150918T19:16:44"
["xmlrpc_type"]=>
string(8) "datetime"
["timestamp"]=>
int(1442603804)
}
Actual result:
--------------
xmlrpc_encode of result:
<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
<value>
<dateTime.iso8601>20150918T19:16:44</dateTime.iso8601>
</value>
</param>
</params>
var_dump of return value:
bool(false)
var_dump of result:
object(stdClass)#1 (3) {
["scalar"]=>
string(17) "20150918T19:16:44"
["xmlrpc_type"]=>
string(8) "datetime"
["timestamp"]=>
int(1442603804)
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70526&edit=1