diff options
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 */ |