mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Fixed bug #39121 (Incorrect return array handling in non-wsdl soap client)
This commit is contained in:
parent
859449b3a0
commit
ae2fc4c4ab
2 changed files with 98 additions and 2 deletions
|
@ -345,6 +345,7 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
|
|||
if (val != NULL) {
|
||||
if (!node_is_equal_ex(val,"result",RPC_SOAP12_NAMESPACE)) {
|
||||
zval *tmp;
|
||||
zval **arr;
|
||||
|
||||
tmp = master_to_zval(NULL, val);
|
||||
if (val->name) {
|
||||
|
@ -353,11 +354,33 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
|
|||
zstr u_name;
|
||||
int u_name_len;
|
||||
zend_string_to_unicode_ex(UG(utf8_conv), &u_name.u, &u_name_len, (char*)val->name, strlen((char*)val->name), &status);
|
||||
if (zend_u_hash_find(Z_ARRVAL_P(return_value), IS_UNICODE, u_name, u_name_len+1, (void**)&arr) == SUCCESS) {
|
||||
add_next_index_zval(*arr, tmp);
|
||||
} else if (val->next && get_node(val->next, (char*)val->name)) {
|
||||
zval *arr;
|
||||
|
||||
MAKE_STD_ZVAL(arr);
|
||||
array_init(arr);
|
||||
add_next_index_zval(arr, tmp);
|
||||
add_u_assoc_zval_ex(return_value, IS_UNICODE, u_name, u_name_len+1, arr);
|
||||
} else {
|
||||
add_u_assoc_zval_ex(return_value, IS_UNICODE, u_name, u_name_len+1, tmp);
|
||||
}
|
||||
efree(u_name.u);
|
||||
} else {
|
||||
if (zend_hash_find(Z_ARRVAL_P(return_value), (char*)val->name, strlen((char*)val->name)+1, (void**)&arr) == SUCCESS) {
|
||||
add_next_index_zval(*arr, tmp);
|
||||
} else if (val->next && get_node(val->next, (char*)val->name)) {
|
||||
zval *arr;
|
||||
|
||||
MAKE_STD_ZVAL(arr);
|
||||
array_init(arr);
|
||||
add_next_index_zval(arr, tmp);
|
||||
add_assoc_zval(return_value, (char*)val->name, arr);
|
||||
} else {
|
||||
add_assoc_zval(return_value, (char*)val->name, tmp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
add_next_index_zval(return_value, tmp);
|
||||
}
|
||||
|
|
73
ext/soap/tests/bugs/bug39121.phpt
Executable file
73
ext/soap/tests/bugs/bug39121.phpt
Executable file
|
@ -0,0 +1,73 @@
|
|||
--TEST--
|
||||
Bug #39121 (Incorrect return array handling in non-wsdl soap client)
|
||||
--SKIPIF--
|
||||
<?php require_once('skipif.inc'); ?>
|
||||
--INI--
|
||||
soap.wsdl_cache_enabled=0
|
||||
--FILE--
|
||||
<?php
|
||||
class LocalSoapClient extends SoapClient {
|
||||
function __doRequest($request, $location, $action, $version) {
|
||||
return <<<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<getDIDAreaResponse xmlns="http://didx.org/GetList">
|
||||
<soapenc:Array soapenc:arrayType="xsd:string[2]" xsi:type="soapenc:Array">
|
||||
<item xsi:type="xsd:string">StateCode</item>
|
||||
<item xsi:type="xsd:string">description</item>
|
||||
</soapenc:Array>
|
||||
<soapenc:Array soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
|
||||
<item xsi:type="xsd:int">241</item>
|
||||
<item xsi:type="xsd:string">Carabobo</item>
|
||||
</soapenc:Array>
|
||||
<soapenc:Array soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
|
||||
<item xsi:type="xsd:int">243</item>
|
||||
<item xsi:type="xsd:string">Aragua and Carabobo</item>
|
||||
</soapenc:Array>
|
||||
<soapenc:Array soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
|
||||
<item xsi:type="xsd:int">261</item>
|
||||
<item xsi:type="xsd:string">Zulia</item>
|
||||
</soapenc:Array>
|
||||
</getDIDAreaResponse>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
||||
EOF;
|
||||
}
|
||||
}
|
||||
|
||||
$client = new LocalSoapClient(NULL, array('location'=>'test://','uri'=>'test://'));
|
||||
print_r($client->getDIDAreaResponse());
|
||||
?>
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
[Array] => Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[0] => StateCode
|
||||
[1] => description
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[0] => 241
|
||||
[1] => Carabobo
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[0] => 243
|
||||
[1] => Aragua and Carabobo
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[0] => 261
|
||||
[1] => Zulia
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue