diff options
author | Nikita Popov <nikic@php.net> | 2016-08-30 18:06:59 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-08-30 18:07:21 +0200 |
commit | 02fb46e17ca38db0b339fd4832a03925493f2837 (patch) | |
tree | fc632f76f7f4480ab15b31a3424ed983e161101d /ext/soap | |
parent | b218eb916fcdc4643e082458b567a2f9ef24127f (diff) | |
parent | 3317287ce125a33eb9d35501e59ad8330215f100 (diff) | |
download | php-git-02fb46e17ca38db0b339fd4832a03925493f2837.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
Diffstat (limited to 'ext/soap')
-rw-r--r-- | ext/soap/php_encoding.c | 4 | ||||
-rw-r--r-- | ext/soap/tests/bug71711.phpt | 22 | ||||
-rw-r--r-- | ext/soap/tests/bug71996.phpt | 10 |
3 files changed, 33 insertions, 3 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 58eaeea666..a8f28fbf1e 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1958,7 +1958,7 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo xmlNodePtr property; ZEND_HASH_FOREACH_STR_KEY_VAL_IND(prop, str_key, zprop) { - + ZVAL_DEREF(zprop); property = master_to_xml(get_conversion(Z_TYPE_P(zprop)), zprop, style, xmlParam); if (str_key) { @@ -2679,7 +2679,6 @@ static xmlNodePtr to_xml_map(encodeTypePtr type, zval *data, int style, xmlNodeP if (Z_TYPE_P(data) == IS_ARRAY) { ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(data), int_val, key_val, temp_data) { - item = xmlNewNode(NULL, BAD_CAST("item")); xmlAddChild(xmlParam, item); key = xmlNewNode(NULL, BAD_CAST("key")); @@ -2702,6 +2701,7 @@ static xmlNodePtr to_xml_map(encodeTypePtr type, zval *data, int style, xmlNodeP smart_str_free(&tmp); } + ZVAL_DEREF(temp_data); xparam = master_to_xml(get_conversion(Z_TYPE_P(temp_data)), temp_data, style, item); xmlNodeSetName(xparam, BAD_CAST("value")); } ZEND_HASH_FOREACH_END(); diff --git a/ext/soap/tests/bug71711.phpt b/ext/soap/tests/bug71711.phpt new file mode 100644 index 0000000000..ec3930c6a5 --- /dev/null +++ b/ext/soap/tests/bug71711.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #71711: Soap Server Member variables reference bug +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php + +$client = new class(null, [ 'location' => '', 'uri' => 'http://example.org']) extends SoapClient { + public function __doRequest($request, $location, $action, $version, $one_way = 0) { + echo $request; + return ''; + } +}; +$ref = array("foo"); +$data = new stdClass; +$data->prop =& $ref; +$client->foo($data); + +?> +--EXPECT-- +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:foo><param0 xsi:type="SOAP-ENC:Struct"><prop SOAP-ENC:arrayType="xsd:string[1]" xsi:type="SOAP-ENC:Array"><item xsi:type="xsd:string">foo</item></prop></param0></ns1:foo></SOAP-ENV:Body></SOAP-ENV:Envelope> diff --git a/ext/soap/tests/bug71996.phpt b/ext/soap/tests/bug71996.phpt index c4bb092b22..9f341fbc5e 100644 --- a/ext/soap/tests/bug71996.phpt +++ b/ext/soap/tests/bug71996.phpt @@ -7,15 +7,23 @@ Bug #71996: Using references in arrays doesn't work like expected $client = new class(null, ['location' => '', 'uri' => 'http://example.org']) extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { - echo $request; + echo $request, "\n"; return ''; } }; + $ref = array("foo"); $data = array(&$ref); $client->foo($data); +$ref = array("def" => "foo"); +$data = array("abc" => &$ref); +$client->foo($data); + ?> --EXPECT-- <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.org" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:foo><param0 SOAP-ENC:arrayType="SOAP-ENC:Array[1]" xsi:type="SOAP-ENC:Array"><item SOAP-ENC:arrayType="xsd:string[1]" xsi:type="SOAP-ENC:Array"><item xsi:type="xsd:string">foo</item></item></param0></ns1:foo></SOAP-ENV:Body></SOAP-ENV:Envelope> + +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:foo><param0 xsi:type="ns2:Map"><item><key xsi:type="xsd:string">abc</key><value xsi:type="ns2:Map"><item><key xsi:type="xsd:string">def</key><value xsi:type="xsd:string">foo</value></item></value></item></param0></ns1:foo></SOAP-ENV:Body></SOAP-ENV:Envelope> |