]> granicus.if.org Git - php/commitdiff
Fixed bug #39454 (Returning a SOAP array segfaults PHP)
authorDmitry Stogov <dmitry@php.net>
Fri, 10 Nov 2006 15:05:38 +0000 (15:05 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 10 Nov 2006 15:05:38 +0000 (15:05 +0000)
ext/soap/php_encoding.c

index 712d8bb1ea5615d8ccffda72e463dffda5dc387a..e7c32c42930f0cce5cded1ae6029c0ff382cf0f9 100644 (file)
@@ -1992,6 +1992,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod
                    zend_hash_find(sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType",
                      sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"),
                      (void **)&arrayType) == SUCCESS &&
+                   (*arrayType)->extraAttributes &&
                    zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
 
                        char *value, *end;
@@ -2040,6 +2041,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod
                           zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType",
                             sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"),
                             (void **)&arrayType) == SUCCESS &&
+                          (*arrayType)->extraAttributes &&
                           zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) {
                        if ((*ext)->ns != NULL) {
                                enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, (*ext)->val);
@@ -2050,6 +2052,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod
                        if (zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
                                           sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
                                           (void **)&arrayType) == SUCCESS &&
+                           (*arrayType)->extraAttributes &&
                            zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
                                dimension = calc_dimension_12((*ext)->val);
                                dims = get_position_12(dimension, (*ext)->val);
@@ -2070,6 +2073,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod
                           zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
                             sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
                             (void **)&arrayType) == SUCCESS &&
+                          (*arrayType)->extraAttributes &&
                           zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraySize"), (void **)&ext) == SUCCESS) {
                        dimension = calc_dimension_12((*ext)->val);
                        dims = get_position_12(dimension, (*ext)->val);
@@ -2227,6 +2231,7 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data)
                   zend_hash_find(type->sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType",
                                  sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"),
                                  (void **)&arrayType) == SUCCESS &&
+                  (*arrayType)->extraAttributes &&
                   zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
                char *type, *end;
 
@@ -2248,6 +2253,7 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data)
                   zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType",
                                  sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"),
                                  (void **)&arrayType) == SUCCESS &&
+                  (*arrayType)->extraAttributes &&
                   zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) {
 
                if ((*ext)->ns != NULL) {
@@ -2257,6 +2263,7 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data)
                if (zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
                                   sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
                                   (void **)&arrayType) == SUCCESS &&
+                   (*arrayType)->extraAttributes &&
                    zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
                        dimension = calc_dimension_12((*ext)->val);
                        dims = get_position_12(dimension, (*ext)->val);
@@ -2269,6 +2276,7 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data)
                   zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
                                  sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
                                  (void **)&arrayType) == SUCCESS &&
+                  (*arrayType)->extraAttributes &&
                   zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
 
                dimension = calc_dimension_12((*ext)->val);