summaryrefslogtreecommitdiff
path: root/ext/soap/php_encoding.c
diff options
context:
space:
mode:
authorKeith Smiley <ksmiley@salesforce.com>2016-06-27 14:23:15 -0400
committerNikita Popov <nikic@php.net>2016-10-12 23:12:45 +0200
commit26287132c0c48e52dbaf1ac44c1d2f0d0d9b0cf7 (patch)
tree08211db215688f22e5a93d45df144dcf0d7a3844 /ext/soap/php_encoding.c
parentbcee2fdbec4f4bba59d4134003cfaf5b1f9b67ab (diff)
downloadphp-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.c6
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 */