1 --- PHP_5_3/ext/soap/php_encoding.c 2011/08/10 13:30:20 314736
2 +++ PHP_5_3/ext/soap/php_encoding.c 2011/08/10 13:44:48 314737
7 +#define CHECK_XML_NULL(xml) \
12 + ALLOC_INIT_ZVAL(ret); \
16 + if (xml->properties) { \
17 + null = get_attribute(xml->properties, "nil"); \
20 + ALLOC_INIT_ZVAL(ret); \
27 #define FIND_ZVAL_NULL(zval, xml, style) \
29 if (!zval || Z_TYPE_P(zval) == IS_NULL) { \
34 +static zval* soap_find_xml_ref(xmlNodePtr node TSRMLS_DC)
38 + if (SOAP_GLOBAL(ref_map) &&
39 + zend_hash_index_find(SOAP_GLOBAL(ref_map), (ulong)node, (void**)&data_ptr) == SUCCESS) {
40 + Z_SET_ISREF_PP(data_ptr);
41 + Z_ADDREF_PP(data_ptr);
47 static zend_bool soap_check_xml_ref(zval **data, xmlNodePtr node TSRMLS_DC)
50 @@ -1513,6 +1546,11 @@
51 sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
52 sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
54 + CHECK_XML_NULL(data);
55 + if ((ret = soap_find_xml_ref(data TSRMLS_CC)) != NULL) {
59 if (ce != ZEND_STANDARD_CLASS_DEF_PTR &&
60 sdlType->encode->to_zval == sdl_guess_convert_zval &&
61 sdlType->encode->details.sdl_type != NULL &&
64 ret = master_to_zval_int(sdlType->encode, data);
66 - FIND_XML_NULL(data, ret);
67 if (soap_check_xml_ref(&ret, data TSRMLS_CC)) {