]> granicus.if.org Git - php/commitdiff
Fixed <any> with XML references
authorDmitry Stogov <dmitry@zend.com>
Fri, 16 May 2014 14:11:28 +0000 (18:11 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 16 May 2014 14:11:28 +0000 (18:11 +0400)
ext/soap/php_encoding.c

index 795a376f3d2f332638f6a67b0e90afee5ab37980..aea31c9abe8a7df12dfa7cfaeaa7e505b720e335 100644 (file)
@@ -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) {