diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-05-16 18:11:28 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-05-16 18:11:28 +0400 |
commit | e159955d15ba7d43ceb2c32d1b7705ef6cf2d25e (patch) | |
tree | da086edd35e146f91ad031abe46676d76d189c5a /ext/soap/php_encoding.c | |
parent | 89dbe074496dcb33484c207347702e51589de943 (diff) | |
download | php-git-e159955d15ba7d43ceb2c32d1b7705ef6cf2d25e.tar.gz |
Fixed <any> with XML references
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r-- | ext/soap/php_encoding.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 795a376f3d..aea31c9abe 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1494,11 +1494,10 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z } else { master_to_zval_int(ret, sdlType->encode, data TSRMLS_CC); } - if (soap_check_xml_ref(ret, data TSRMLS_CC)) { - return ret; - } - redo_any = get_zval_property(ret, "any", &rv TSRMLS_CC); + soap_add_xml_ref(ret, data TSRMLS_CC); + + redo_any = get_zval_property(ret, "any", &rv TSRMLS_CC); if (Z_TYPE_P(ret) == IS_OBJECT && ce != ZEND_STANDARD_CLASS_DEF_PTR) { zend_object *zobj = Z_OBJ_P(ret); zobj->ce = ce; @@ -1526,18 +1525,14 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z soap_add_xml_ref(ret, data TSRMLS_CC); } if (sdlType->model) { - if (redo_any) { - if (Z_REFCOUNTED_P(redo_any)) Z_ADDREF_P(redo_any); - unset_zval_property(ret, "any" TSRMLS_CC); - } model_to_zval_object(ret, sdlType->model, data, sdl TSRMLS_CC); if (redo_any) { - zval *tmp = get_zval_property(ret, "any", &rv TSRMLS_CC); - - if (tmp == NULL) { + if (!get_zval_property(ret, "any", &rv TSRMLS_CC)) { model_to_zval_any(ret, data->children TSRMLS_CC); + soap_add_xml_ref(ret, data TSRMLS_CC); + } else { + unset_zval_property(ret, "any" TSRMLS_CC); } - zval_ptr_dtor(redo_any); } } if (sdlType->attributes) { |