diff options
author | Xinchen Hui <laruence@php.net> | 2014-05-17 10:39:05 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-05-17 10:39:05 +0800 |
commit | 84eeae80d85be7556c09106c227605f804a4ee9e (patch) | |
tree | d01265baa234ac0a89e90893e2850751e3fd8463 | |
parent | a4a1fc5552b8821990a881f742d4b453861aa3f1 (diff) | |
parent | fa4b281c567ed48d205c42b011f9752ec4b455ea (diff) | |
download | php-git-84eeae80d85be7556c09106c227605f804a4ee9e.tar.gz |
Merge branch 'phpng' of git.php.net:php-src into phpng
-rw-r--r-- | ext/soap/php_encoding.c | 27 | ||||
-rw-r--r-- | ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt | 2 |
2 files changed, 16 insertions, 13 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 795a376f3d..4d339173bc 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1250,6 +1250,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node TSRMLS_DC) while (node != NULL) { if (get_zval_property(ret, (char*)node->name, &rv TSRMLS_CC) == NULL) { + ZVAL_NULL(&val); master_to_zval(&val, get_conversion(XSD_ANYXML), node TSRMLS_CC); if (any && Z_TYPE_P(any) != IS_ARRAY) { @@ -1268,6 +1269,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node TSRMLS_DC) while (node->next != NULL) { zval val2; + ZVAL_NULL(&val2); master_to_zval(&val2, get_conversion(XSD_ANYXML), node->next TSRMLS_CC); if (Z_TYPE(val2) != IS_STRING || *Z_STRVAL(val) != '<') { break; @@ -1329,6 +1331,7 @@ static void model_to_zval_object(zval *ret, sdlContentModelPtr model, xmlNodePtr zval val; xmlNodePtr r_node; + ZVAL_NULL(&val); r_node = check_and_resolve_href(node); if (r_node && r_node->children && r_node->children->content) { if (model->u.element->fixed && strcmp(model->u.element->fixed, (char*)r_node->children->content) != 0) { @@ -1494,11 +1497,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 +1528,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) { @@ -1565,6 +1563,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z dummy = xmlNewNode(NULL, BAD_CAST("BOGUS")); text = xmlNewText(BAD_CAST(str_val)); xmlAddChild(dummy, text); + ZVAL_NULL(&data); master_to_zval(&data, attr->encode, dummy TSRMLS_CC); xmlFreeNode(dummy); set_zval_property(ret, attr->name, &data TSRMLS_CC); @@ -1588,6 +1587,7 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z zval tmpVal, rv; zval *prop; + ZVAL_NULL(&tmpVal); master_to_zval(&tmpVal, NULL, trav TSRMLS_CC); prop = get_zval_property(ret, (char*)trav->name, &rv TSRMLS_CC); @@ -2640,6 +2640,7 @@ static zval *to_zval_array(zval *ret, encodeTypePtr type, xmlNodePtr data TSRMLS zval tmpVal, *ar; xmlAttrPtr position = get_attribute(trav->properties,"position"); + ZVAL_NULL(&tmpVal); master_to_zval(&tmpVal, enc, trav TSRMLS_CC); if (position != NULL && position->children && position->children->content) { char* tmp = strrchr((char*)position->children->content, '['); @@ -2768,7 +2769,9 @@ static zval *to_zval_map(zval *ret, encodeTypePtr type, xmlNodePtr data TSRMLS_D soap_error0(E_ERROR, "Encoding: Can't decode apache map, missing value"); } + ZVAL_NULL(&key); master_to_zval(&key, NULL, xmlKey TSRMLS_CC); + ZVAL_NULL(&value); master_to_zval(&value, NULL, xmlValue TSRMLS_CC); if (Z_TYPE(key) == IS_STRING) { diff --git a/ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt b/ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt index 3549f45234..9726f848e3 100644 --- a/ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt +++ b/ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt @@ -33,7 +33,7 @@ object(stdClass)#%d (3) { ["varString"]=> string(4) "arg1" ["child"]=> - &object(stdClass)#%d (3) { + object(stdClass)#%d (3) { ["varInt"]=> int(2) ["varString"]=> |