com php-src: Partial fix for XML references handling: ext/soap/php_encoding.c
| From: | Dmitry Stogov | Date: | Thu, 15 May 2014 21:49:04 +0000 |
| Subject: | com php-src: Partial fix for XML references handling: ext/soap/php_encoding.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-78397@lists.php.net to get a copy of this message | ||
Commit: 5a9de70ba7d7f03a4775ab448bade579f1310c74
Author: Dmitry Stogov <dmitry@zend.com> Fri, 16 May 2014 01:49:04 +0400
Parents: 9b8b55bc16aaddb7b7fcaefcffd72e788e2536bf
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5a9de70ba7d7f03a4775ab448bade579f1310c74
Log:
Partial fix for XML references handling
Changed paths:
M ext/soap/php_encoding.c
Diff:
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index 261912b..2aa004c 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -355,7 +355,7 @@ static zval* soap_find_xml_ref(xmlNodePtr node TSRMLS_DC)
zval *data_ptr;
if (SOAP_GLOBAL(ref_map) &&
- (data_ptr = zend_hash_index_find(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) {
+ (data_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) {
//??? Z_SET_ISREF_PP(data_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(data_ptr);
Z_ADDREF_P(data_ptr);
@@ -369,7 +369,7 @@ static zend_bool soap_check_xml_ref(zval *data, xmlNodePtr node TSRMLS_DC)
zval *data_ptr;
if (SOAP_GLOBAL(ref_map)) {
- if ((data_ptr = zend_hash_index_find(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) {
+ if ((data_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (ulong)node)) != NULL) {
if (data != data_ptr) {
zval_ptr_dtor(data);
ZVAL_COPY_VALUE(data, data_ptr);
@@ -379,7 +379,7 @@ static zend_bool soap_check_xml_ref(zval *data, xmlNodePtr node TSRMLS_DC)
return 1;
}
} else {
- zend_hash_index_update(SOAP_GLOBAL(ref_map), (ulong)node, data);
+ zend_hash_index_update_ptr(SOAP_GLOBAL(ref_map), (ulong)node, data);
}
}
return 0;
@@ -1484,8 +1484,11 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr
data, z
sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
+ zval *ref;
+
CHECK_XML_NULL(data);
- if ((ret = soap_find_xml_ref(data TSRMLS_CC)) != NULL) {
+ if ((ref = soap_find_xml_ref(data TSRMLS_CC)) != NULL) {
+ ZVAL_COPY_VALUE(ret, ref);
return ret;
}