]> granicus.if.org Git - php/commitdiff
Fixed bug #71996
authorNikita Popov <nikic@php.net>
Tue, 30 Aug 2016 15:19:19 +0000 (17:19 +0200)
committerNikita Popov <nikic@php.net>
Tue, 30 Aug 2016 15:20:55 +0000 (17:20 +0200)
NEWS
ext/soap/php_encoding.c
ext/soap/tests/bug71996.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 36b01a3453398f9331477d3ad3fc25b07fbba41d..37daabe74a3068d7f72d1f92992d726dcaad033e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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)
index fc389f2365ef4e5c55009c720732f32bd61e5f66..9c9e4e9e560cf0c3141e4d03beebb30f77d94847 100644 (file)
@@ -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 (file)
index 0000000..c4bb092
--- /dev/null
@@ -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>