From 78083108e7c29146eebe148252560d8511c5ed34 Mon Sep 17 00:00:00 2001 From: Craig Duncan Date: Sun, 20 Nov 2016 17:41:14 +0000 Subject: [PATCH 1/2] Create a test for bug 73538 --- ext/soap/tests/bugs/bug73538.phpt | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 ext/soap/tests/bugs/bug73538.phpt diff --git a/ext/soap/tests/bugs/bug73538.phpt b/ext/soap/tests/bugs/bug73538.phpt new file mode 100644 index 0000000000000..1bf0372419d6f --- /dev/null +++ b/ext/soap/tests/bugs/bug73538.phpt @@ -0,0 +1,35 @@ +--TEST-- +SOAP: SoapClient::__setHeaders array overrides previous headers +--SKIPIF-- + +--FILE-- + "test://", + "uri" => "test://", + "exceptions" => false, + "trace" => true, +]); +$client->__setSoapHeaders(new \SoapHeader('ns', 'Header', ['something' => 1])); +$client->__setSoapHeaders(new \SoapHeader('ns', 'Header', ['something' => 2])); +$client->test(); +echo $client->__getLastRequest(); + +$client = new SoapClient(null, [ + "location" => "test://", + "uri" => "test://", + "exceptions" => false, + "trace" => true, +]); +$client->__setSoapHeaders([new \SoapHeader('ns', 'Header', ['something' => 1])]); +$client->__setSoapHeaders([new \SoapHeader('ns', 'Header', ['something' => 2])]); +$client->test(); +echo $client->__getLastRequest(); + +?> +--EXPECT-- + +something2 + +something2 From e749e04fcf6b3353d5da4d61082d670029f84d55 Mon Sep 17 00:00:00 2001 From: Craig Duncan Date: Sun, 20 Nov 2016 17:42:02 +0000 Subject: [PATCH 2/2] Remove any previous default headers and replace with the specified ones --- ext/soap/soap.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ext/soap/soap.c b/ext/soap/soap.c index a2170283c8b7b..2a93d3c8b69b5 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -3212,9 +3212,7 @@ PHP_METHOD(SoapClient, __setSoapHeaders) zval *default_headers; verify_soap_headers_array(Z_ARRVAL_P(headers)); - if ((default_headers = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "__default_headers", sizeof("__default_headers")-1)) == NULL) { - add_property_zval(this_ptr, "__default_headers", headers); - } + add_property_zval(this_ptr, "__default_headers", headers); } else if (Z_TYPE_P(headers) == IS_OBJECT && instanceof_function(Z_OBJCE_P(headers), soap_header_class_entry)) { zval default_headers;