diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index a8f28fbf1ec..c0e22d741bd 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -1225,7 +1225,7 @@ static void unset_zval_property(zval* object, char* name)
static void model_to_zval_any(zval *ret, xmlNodePtr node)
{
- zval rv, arr, val;
+ zval rv, arr, val, keepVal;
zval* any = NULL;
char* name = NULL;
@@ -1254,6 +1254,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node)
ZVAL_NULL(&val2);
master_to_zval(&val2, get_conversion(XSD_ANYXML), node->next);
if (Z_TYPE(val2) != IS_STRING || *Z_STRVAL(val) != '<') {
+ Z_TRY_DELREF(val2);
break;
}
concat_function(&val, &val, &val2);
@@ -1272,7 +1273,8 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node)
any = &arr;
name = NULL;
} else {
- any = &val;
+ ZVAL_COPY_VALUE(&keepVal, &val);
+ any = &keepVal;
}
} else {
/* Add array element */
diff --git a/ext/soap/tests/bugs/bug73237.phpt b/ext/soap/tests/bugs/bug73237.phpt
new file mode 100644
index 00000000000..e97345fdaab
--- /dev/null
+++ b/ext/soap/tests/bugs/bug73237.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Bug #73237 "Any" data missing when result includes a struct
+--SKIPIF--
+
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+trueCampaignMember00vi0000011VMgeAAG00vi0000011VMgeAAG701i0000001lreeAAASent00Qi000001UrbYFEAZLeadangela.lansbury@cbs.com1
+EOF;
+ }
+}
+$client = new LocalSoapClient(dirname(__FILE__)."/bug73237.wsdl");
+var_dump($client->query(""));
+?>
+--EXPECT--
+object(stdClass)#2 (1) {
+ ["result"]=>
+ object(stdClass)#3 (4) {
+ ["done"]=>
+ string(4) "true"
+ ["queryLocator"]=>
+ NULL
+ ["records"]=>
+ object(SoapVar)#6 (4) {
+ ["enc_type"]=>
+ int(0)
+ ["enc_value"]=>
+ object(stdClass)#4 (3) {
+ ["type"]=>
+ string(14) "CampaignMember"
+ ["Id"]=>
+ array(2) {
+ [0]=>
+ string(18) "00vi0000011VMgeAAG"
+ [1]=>
+ string(18) "00vi0000011VMgeAAG"
+ }
+ ["any"]=>
+ array(2) {
+ [0]=>
+ string(175) "701i0000001lreeAAASent00Qi000001UrbYFEAZ"
+ ["Lead"]=>
+ object(stdClass)#5 (3) {
+ ["type"]=>
+ string(4) "Lead"
+ ["Id"]=>
+ NULL
+ ["any"]=>
+ string(44) "angela.lansbury@cbs.com"
+ }
+ }
+ }
+ ["enc_stype"]=>
+ string(13) "genericObject"
+ ["enc_ns"]=>
+ string(27) "urn:object.test.example.org"
+ }
+ ["size"]=>
+ string(1) "1"
+ }
+}
diff --git a/ext/soap/tests/bugs/bug73237.wsdl b/ext/soap/tests/bugs/bug73237.wsdl
new file mode 100644
index 00000000000..230338c2858
--- /dev/null
+++ b/ext/soap/tests/bugs/bug73237.wsdl
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create a Query Cursor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+