]> git.pld-linux.org Git - packages/php.git/blob - php-5.3.7-bug-55323.patch
- make it possible to coinstall phpXY-pdo-pgsql
[packages/php.git] / php-5.3.7-bug-55323.patch
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
3 @@ -114,6 +114,26 @@
4                 } \
5         }
6  
7 +#define CHECK_XML_NULL(xml) \
8 +       { \
9 +               xmlAttrPtr null; \
10 +               if (!xml) { \
11 +                       zval *ret; \
12 +                       ALLOC_INIT_ZVAL(ret); \
13 +                       ZVAL_NULL(ret); \
14 +                       return ret; \
15 +               } \
16 +               if (xml->properties) { \
17 +                       null = get_attribute(xml->properties, "nil"); \
18 +                       if (null) { \
19 +                               zval *ret; \
20 +                               ALLOC_INIT_ZVAL(ret); \
21 +                               ZVAL_NULL(ret); \
22 +                               return ret; \
23 +                       } \
24 +               } \
25 +       }
26 +
27  #define FIND_ZVAL_NULL(zval, xml, style) \
28  { \
29         if (!zval || Z_TYPE_P(zval) == IS_NULL) { \
30 @@ -338,6 +358,19 @@
31         return 0;
32  }
33  
34 +static zval* soap_find_xml_ref(xmlNodePtr node TSRMLS_DC)
35 +{
36 +       zval **data_ptr;
37 +
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);
42 +               return *data_ptr;
43 +       }
44 +       return NULL;
45 +}
46 +
47  static zend_bool soap_check_xml_ref(zval **data, xmlNodePtr node TSRMLS_DC)
48  {
49         zval **data_ptr;
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) {
53  
54 +                               CHECK_XML_NULL(data);
55 +                               if ((ret = soap_find_xml_ref(data TSRMLS_CC)) != NULL) {
56 +                                       return ret;
57 +                               }
58 +
59                             if (ce != ZEND_STANDARD_CLASS_DEF_PTR &&
60                                 sdlType->encode->to_zval == sdl_guess_convert_zval &&
61                                 sdlType->encode->details.sdl_type != NULL &&
62 @@ -1526,7 +1564,6 @@
63                             } else {
64                                         ret = master_to_zval_int(sdlType->encode, data);
65                                 }
66 -                               FIND_XML_NULL(data, ret);
67                                 if (soap_check_xml_ref(&ret, data TSRMLS_CC)) {
68                                         return ret;
69                                 }
This page took 0.035542 seconds and 3 git commands to generate.