diff options
author | Keith Smiley <ksmiley@salesforce.com> | 2016-06-27 14:23:15 -0400 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-10-12 23:12:45 +0200 |
commit | 26287132c0c48e52dbaf1ac44c1d2f0d0d9b0cf7 (patch) | |
tree | 08211db215688f22e5a93d45df144dcf0d7a3844 /ext/soap/php_encoding.c | |
parent | bcee2fdbec4f4bba59d4134003cfaf5b1f9b67ab (diff) | |
download | php-git-26287132c0c48e52dbaf1ac44c1d2f0d0d9b0cf7.tar.gz |
Fixed bug #73237
If the response includes both fields with simple types (which get
concatenated into an XML string) and a complex type (which is parsed
into an object), then the object will parsed into the same zval as the
simple types and will overwrite the string.
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r-- | ext/soap/php_encoding.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 10d59ad576..7947b4cea3 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1230,7 +1230,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; @@ -1259,6 +1259,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); @@ -1277,7 +1278,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 */ |