diff options
author | Nikita Popov <nikic@php.net> | 2016-08-30 17:19:19 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-08-30 17:20:55 +0200 |
commit | 8e487aefaaf88bdad6343da06286bfc86063836c (patch) | |
tree | c8c809c5a161beecee90e04d2c0f922a2182385e | |
parent | 972302d2f0bb12689db280df8a3daadb0d5003b3 (diff) | |
download | php-git-8e487aefaaf88bdad6343da06286bfc86063836c.tar.gz |
Fixed bug #71996
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/soap/php_encoding.c | 1 | ||||
-rw-r--r-- | ext/soap/tests/bug71996.phpt | 21 |
3 files changed, 26 insertions, 0 deletions
@@ -5,6 +5,10 @@ PHP NEWS - mbstring: . Fixed bug #66797 (mb_substr only takes 32-bit signed integer). (cmb) +- SOAP: + . Fixed bug #71996 (Using references in arrays doesn't work like expected). + (Nikita) + - Standard: . Fixed bug #71882 (Negative ftruncate() on php://memory exhausts memory). (cmb) diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index fc389f2365..9c9e4e9e56 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -2120,6 +2120,7 @@ static void add_xml_array_elements(xmlNodePtr xmlParam, if (j >= dims[0]) { break; } + ZVAL_DEREF(zdata); if (dimension == 1) { if (enc == NULL) { xparam = master_to_xml(get_conversion(Z_TYPE_P(zdata)), zdata, style, xmlParam); diff --git a/ext/soap/tests/bug71996.phpt b/ext/soap/tests/bug71996.phpt new file mode 100644 index 0000000000..c4bb092b22 --- /dev/null +++ b/ext/soap/tests/bug71996.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #71996: Using references in arrays doesn't work like expected +--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 = array(&$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> |