summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-05-17 10:39:05 +0800
committerXinchen Hui <laruence@php.net>2014-05-17 10:39:05 +0800
commit84eeae80d85be7556c09106c227605f804a4ee9e (patch)
treed01265baa234ac0a89e90893e2850751e3fd8463
parenta4a1fc5552b8821990a881f742d4b453861aa3f1 (diff)
parentfa4b281c567ed48d205c42b011f9752ec4b455ea (diff)
downloadphp-git-84eeae80d85be7556c09106c227605f804a4ee9e.tar.gz
Merge branch 'phpng' of git.php.net:php-src into phpng
-rw-r--r--ext/soap/php_encoding.c27
-rw-r--r--ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt2
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"]=>