]> granicus.if.org Git - php/commitdiff
Fixed wrong array autodetection
authorDmitry Stogov <dmitry@php.net>
Thu, 29 Sep 2005 10:02:11 +0000 (10:02 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 29 Sep 2005 10:02:11 +0000 (10:02 +0000)
ext/soap/php_encoding.c

index 02ac85480d2ec145609293b0b02c9df80587ecae..ece66dfa90703ff75d722ada8a07c035949eafdf 100644 (file)
@@ -1321,7 +1321,9 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *
                        data = get_zval_property(object, model->u.element->name TSRMLS_CC);
                        if (data) {
                                enc = model->u.element->encode;
-                               if ((model->max_occurs == -1 || model->max_occurs > 1) && Z_TYPE_P(data) == IS_ARRAY) {
+                               if ((model->max_occurs == -1 || model->max_occurs > 1) &&
+                                   Z_TYPE_P(data) == IS_ARRAY &&
+                                   !is_map(data)) {
                                        HashTable *ht = Z_ARRVAL_P(data);
                                        zval **val;
 
@@ -1344,7 +1346,9 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *
                                                        }
                                                }
                                                xmlNodeSetName(property, model->u.element->name);
-                                               if (style == SOAP_LITERAL && model->u.element->namens) {
+                                               if (style == SOAP_LITERAL &&
+                                                   model->u.element->namens &&
+                                                   model->u.element->form == XSD_FORM_QUALIFIED) {
                                                        xmlNsPtr nsp = encode_add_ns(property, model->u.element->namens);
                                                        xmlSetNs(property, nsp);
                                                }
@@ -1404,7 +1408,9 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *
                        data = get_zval_property(object, "any" TSRMLS_CC);
                        if (data) {
                                enc = get_conversion(XSD_ANYXML);
-                               if ((model->max_occurs == -1 || model->max_occurs > 1) && Z_TYPE_P(data) == IS_ARRAY) {
+                               if ((model->max_occurs == -1 || model->max_occurs > 1) &&
+                                   Z_TYPE_P(data) == IS_ARRAY &&
+                                   !is_map(data)) {
                                        HashTable *ht = Z_ARRVAL_P(data);
                                        zval **val;
 
@@ -1599,7 +1605,9 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo
                                                property = master_to_xml(array_el->encode, *val, style, xmlParam);
                                        }
                                        xmlNodeSetName(property, array_el->name);
-                                       if (style == SOAP_LITERAL && array_el->namens) {
+                                       if (style == SOAP_LITERAL &&
+                                          array_el->namens &&
+                                          array_el->form == XSD_FORM_QUALIFIED) {
                                                xmlNsPtr nsp = encode_add_ns(property, array_el->namens);
                                                xmlSetNs(property, nsp);
                                        }