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 + + + + + + + + + + + + + + + + + + + + + + + +