dmitry          Thu Apr  1 08:42:39 2004 EDT

  Added files:                 
    /php-src/ext/soap/tests/bugs        bug27722.phpt bug27722.wsdl 

  Modified files:              
    /php-src/ext/soap   php_schema.c 
  Log:
  Fixed bug #27722 (Segfault on schema without targetNamespace).
  
  
http://cvs.php.net/diff.php/php-src/ext/soap/php_schema.c?r1=1.46&r2=1.47&ty=u
Index: php-src/ext/soap/php_schema.c
diff -u php-src/ext/soap/php_schema.c:1.46 php-src/ext/soap/php_schema.c:1.47
--- php-src/ext/soap/php_schema.c:1.46  Tue Feb 24 05:13:25 2004
+++ php-src/ext/soap/php_schema.c       Thu Apr  1 08:42:36 2004
@@ -17,28 +17,28 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_schema.c,v 1.46 2004/02/24 10:13:25 dmitry Exp $ */
+/* $Id: php_schema.c,v 1.47 2004/04/01 13:42:36 dmitry Exp $ */
 
 #include "php_soap.h"
 #include "libxml/uri.h"
 
-static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr simpleType, 
sdlTypePtr cur_type);
-static int schema_complexType(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr compType, 
sdlTypePtr cur_type);
-static int schema_list(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr listType, sdlTypePtr 
cur_type);
-static int schema_union(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr unionType, sdlTypePtr 
cur_type);
-static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr simpCompType, 
sdlTypePtr cur_type);
-static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
restType, sdlTypePtr cur_type, int simpleType);
-static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
restType, sdlTypePtr cur_type);
-static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
extType, sdlTypePtr cur_type);
-static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
extType, sdlTypePtr cur_type);
-static int schema_sequence(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr seqType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
-static int schema_all(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
-static int schema_choice(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr choiceType, 
sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_group(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr groupType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
-static int schema_any(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
-static int schema_element(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr element, sdlTypePtr 
cur_type, sdlContentModelPtr model);
-static int schema_attribute(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx);
-static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx);
+static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpleType, 
sdlTypePtr cur_type);
+static int schema_complexType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compType, 
sdlTypePtr cur_type);
+static int schema_list(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr listType, sdlTypePtr 
cur_type);
+static int schema_union(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr unionType, sdlTypePtr 
cur_type);
+static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpCompType, 
sdlTypePtr cur_type);
+static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
restType, sdlTypePtr cur_type, int simpleType);
+static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
restType, sdlTypePtr cur_type);
+static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
extType, sdlTypePtr cur_type);
+static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
extType, sdlTypePtr cur_type);
+static int schema_sequence(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr seqType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
+static int schema_all(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
+static int schema_choice(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr choiceType, 
sdlTypePtr cur_type, sdlContentModelPtr model);
+static int schema_group(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr groupType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
+static int schema_any(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model);
+static int schema_element(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr element, sdlTypePtr 
cur_type, sdlContentModelPtr model);
+static int schema_attribute(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx);
+static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx);
 
 static int schema_restriction_var_int(xmlNodePtr val, sdlRestrictionIntPtr *valptr);
 
@@ -187,6 +187,10 @@
        }
 
        tns = get_attribute(schema->properties, "targetNamespace");
+       if (tns == NULL) {
+               tns = xmlSetProp(schema, "targetNamespace", "");
+               xmlNewNs(schema, "", NULL);
+       }
 
        trav = schema->children;
        while (trav != NULL) {
@@ -302,14 +306,14 @@
   Content: (annotation?, (restriction | list | union))
 </simpleType>
 */
-static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr simpleType, 
sdlTypePtr cur_type)
+static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpleType, 
sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr name, ns;
 
        ns = get_attribute(simpleType->properties, "targetNamespace");
        if (ns == NULL) {
-               ns = tsn;
+               ns = tns;
        }
 
        name = get_attribute(simpleType->properties, "name");
@@ -377,15 +381,15 @@
        }
        if (trav != NULL) {
                if (node_is_equal(trav,"restriction")) {
-                       schema_restriction_simpleContent(sdl, tsn, trav, cur_type, 1);
+                       schema_restriction_simpleContent(sdl, tns, trav, cur_type, 1);
                        trav = trav->next;
                } else if (node_is_equal(trav,"list")) {
                        cur_type->kind = XSD_TYPEKIND_LIST;
-                       schema_list(sdl, tsn, trav, cur_type);
+                       schema_list(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else if (node_is_equal(trav,"union")) {
                        cur_type->kind = XSD_TYPEKIND_UNION;
-                       schema_union(sdl, tsn, trav, cur_type);
+                       schema_union(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in simpleType",trav->name);
@@ -408,7 +412,7 @@
   Content: (annotation?, (simpleType?))
 </list>
 */
-static int schema_list(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr listType, sdlTypePtr 
cur_type)
+static int schema_list(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr listType, sdlTypePtr 
cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr itemType;
@@ -457,7 +461,7 @@
                memset(newType, 0, sizeof(sdlType));
 
                newType->name = estrdup("anonymous");
-               newType->namens = estrdup(tsn->children->content);
+               newType->namens = estrdup(tns->children->content);
 
                if (cur_type->elements == NULL) {
                        cur_type->elements = emalloc(sizeof(HashTable));
@@ -465,7 +469,7 @@
                }
                zend_hash_next_index_insert(cur_type->elements, &newType, 
sizeof(sdlTypePtr), (void **)&tmp);
 
-               schema_simpleType(sdl, tsn, trav, newType);
+               schema_simpleType(sdl, tns, trav, newType);
                trav = trav->next;
        }
        if (trav != NULL) {
@@ -482,7 +486,7 @@
   Content: (annotation?, (simpleType*))
 </union>
 */
-static int schema_union(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr unionType, sdlTypePtr 
cur_type)
+static int schema_union(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr unionType, sdlTypePtr 
cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr memberTypes;
@@ -549,7 +553,7 @@
                        memset(newType, 0, sizeof(sdlType));
 
                        newType->name = estrdup("anonymous");
-                       newType->namens = estrdup(tsn->children->content);
+                       newType->namens = estrdup(tns->children->content);
 
                        if (cur_type->elements == NULL) {
                                cur_type->elements = emalloc(sizeof(HashTable));
@@ -557,7 +561,7 @@
                        }
                        zend_hash_next_index_insert(cur_type->elements, &newType, 
sizeof(sdlTypePtr), (void **)&tmp);
 
-                       schema_simpleType(sdl, tsn, trav, newType);
+                       schema_simpleType(sdl, tns, trav, newType);
 
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in union",trav->name);
@@ -577,7 +581,7 @@
   Content: (annotation?, (restriction | extension))
 </simpleContent>
 */
-static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr simpCompType, 
sdlTypePtr cur_type)
+static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpCompType, 
sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
 
@@ -589,11 +593,11 @@
        if (trav != NULL) {
                if (node_is_equal(trav, "restriction")) {
                        cur_type->kind = XSD_TYPEKIND_RESTRICTION;
-                       schema_restriction_simpleContent(sdl, tsn, trav, cur_type, 0);
+                       schema_restriction_simpleContent(sdl, tns, trav, cur_type, 0);
                        trav = trav->next;
                } else if (node_is_equal(trav, "extension")) {
                        cur_type->kind = XSD_TYPEKIND_EXTENSION;
-                       schema_extension_simpleContent(sdl, tsn, trav, cur_type);
+                       schema_extension_simpleContent(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in simpleContent",trav->name);
@@ -622,7 +626,7 @@
   Content: (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | 
maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | 
enumeration | whiteSpace | pattern)*)?, ((attribute | attributeGroup)*, anyAttribute?))
 </restriction>
 */
-static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
restType, sdlTypePtr cur_type, int simpleType)
+static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
restType, sdlTypePtr cur_type, int simpleType)
 {
        xmlNodePtr trav;
        xmlAttrPtr base;
@@ -654,7 +658,7 @@
                trav = trav->next;
        }
        if (trav != NULL && node_is_equal(trav, "simpleType")) {
-               schema_simpleType(sdl, tsn, trav, cur_type);
+               schema_simpleType(sdl, tns, trav, cur_type);
                trav = trav->next;
        }
        while (trav != NULL) {
@@ -697,9 +701,9 @@
        if (!simpleType) {
                while (trav != NULL) {
                        if (node_is_equal(trav,"attribute")) {
-                               schema_attribute(sdl, tsn, trav, cur_type, NULL);
+                               schema_attribute(sdl, tns, trav, cur_type, NULL);
                        } else if (node_is_equal(trav,"attributeGroup")) {
-                               schema_attributeGroup(sdl, tsn, trav, cur_type, NULL);
+                               schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
                        } else if (node_is_equal(trav,"anyAttribute")) {
                                /* TODO: <anyAttribute> support */
                                trav = trav->next;
@@ -725,7 +729,7 @@
   Content: (annotation?, (group | all | choice | sequence)?, ((attribute | 
attributeGroup)*, anyAttribute?))
 </restriction>
 */
-static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
restType, sdlTypePtr cur_type)
+static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
restType, sdlTypePtr cur_type)
 {
        xmlAttrPtr base;
        xmlNodePtr trav;
@@ -753,24 +757,24 @@
        }
        if (trav != NULL) {
                if (node_is_equal(trav,"group")) {
-                       schema_group(sdl, tsn, trav, cur_type, NULL);
+                       schema_group(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"all")) {
-                       schema_all(sdl, tsn, trav, cur_type, NULL);
+                       schema_all(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"choice")) {
-                       schema_choice(sdl, tsn, trav, cur_type, NULL);
+                       schema_choice(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"sequence")) {
-                       schema_sequence(sdl, tsn, trav, cur_type, NULL);
+                       schema_sequence(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                }
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"attribute")) {
-                       schema_attribute(sdl, tsn, trav, cur_type, NULL);
+                       schema_attribute(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"attributeGroup")) {
-                       schema_attributeGroup(sdl, tsn, trav, cur_type, NULL);
+                       schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"anyAttribute")) {
                        /* TODO: <anyAttribute> support */
                        trav = trav->next;
@@ -850,7 +854,7 @@
   Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))
 </extension>
 */
-static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
extType, sdlTypePtr cur_type)
+static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
extType, sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr base;
@@ -878,9 +882,9 @@
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"attribute")) {
-                       schema_attribute(sdl, tsn, trav, cur_type, NULL);
+                       schema_attribute(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"attributeGroup")) {
-                       schema_attributeGroup(sdl, tsn, trav, cur_type, NULL);
+                       schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"anyAttribute")) {
                        /* TODO: <anyAttribute> support */
                        trav = trav->next;
@@ -905,7 +909,7 @@
   Content: (annotation?, ((group | all | choice | sequence)?, ((attribute | 
attributeGroup)*, anyAttribute?)))
 </extension>
 */
-static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr 
extType, sdlTypePtr cur_type)
+static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr 
extType, sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr base;
@@ -933,24 +937,24 @@
        }
        if (trav != NULL) {
                if (node_is_equal(trav,"group")) {
-                       schema_group(sdl, tsn, trav, cur_type, NULL);
+                       schema_group(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"all")) {
-                       schema_all(sdl, tsn, trav, cur_type, NULL);
+                       schema_all(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"choice")) {
-                       schema_choice(sdl, tsn, trav, cur_type, NULL);
+                       schema_choice(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                } else if (node_is_equal(trav,"sequence")) {
-                       schema_sequence(sdl, tsn, trav, cur_type, NULL);
+                       schema_sequence(sdl, tns, trav, cur_type, NULL);
                        trav = trav->next;
                }
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"attribute")) {
-                       schema_attribute(sdl, tsn, trav, cur_type, NULL);
+                       schema_attribute(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"attributeGroup")) {
-                       schema_attributeGroup(sdl, tsn, trav, cur_type, NULL);
+                       schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"anyAttribute")) {
                        /* TODO: <anyAttribute> support */
                        trav = trav->next;
@@ -975,7 +979,7 @@
   Content: (annotation?, element*)
 </all>
 */
-static int schema_all(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr all, sdlTypePtr 
cur_type, sdlContentModelPtr model)
+static int schema_all(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr all, sdlTypePtr 
cur_type, sdlContentModelPtr model)
 {
        xmlNodePtr trav;
        xmlAttrPtr attr;
@@ -1015,7 +1019,7 @@
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"element")) {
-                       schema_element(sdl, tsn, trav, cur_type, newModel);
+                       schema_element(sdl, tns, trav, cur_type, newModel);
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in all",trav->name);
                }
@@ -1035,7 +1039,7 @@
   Content: (annotation?)
 </group>
 */
-static int schema_group(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr groupType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
+static int schema_group(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr groupType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
 {
        xmlNodePtr trav;
        xmlAttrPtr attr;
@@ -1044,7 +1048,7 @@
 
        ns = get_attribute(groupType->properties, "targetNamespace");
        if (ns == NULL) {
-               ns = tsn;
+               ns = tns;
        }
 
        name = get_attribute(groupType->properties, "name");
@@ -1141,21 +1145,21 @@
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: group 
has both 'ref' attribute and subcontent");
                        }
                        newModel->kind = XSD_CONTENT_CHOICE;
-                       schema_choice(sdl, tsn, trav, cur_type, newModel);
+                       schema_choice(sdl, tns, trav, cur_type, newModel);
                        trav = trav->next;
                } else if (node_is_equal(trav,"sequence")) {
                        if (ref != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: group 
has both 'ref' attribute and subcontent");
                        }
                        newModel->kind = XSD_CONTENT_SEQUENCE;
-                       schema_sequence(sdl, tsn, trav, cur_type, newModel);
+                       schema_sequence(sdl, tns, trav, cur_type, newModel);
                        trav = trav->next;
                } else if (node_is_equal(trav,"all")) {
                        if (ref != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: group 
has both 'ref' attribute and subcontent");
                        }
                        newModel->kind = XSD_CONTENT_ALL;
-                       schema_all(sdl, tsn, trav, cur_type, newModel);
+                       schema_all(sdl, tns, trav, cur_type, newModel);
                        trav = trav->next;
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in group",trav->name);
@@ -1175,7 +1179,7 @@
   Content: (annotation?, (element | group | choice | sequence | any)*)
 </choice>
 */
-static int schema_choice(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr choiceType, 
sdlTypePtr cur_type, sdlContentModelPtr model)
+static int schema_choice(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr choiceType, 
sdlTypePtr cur_type, sdlContentModelPtr model)
 {
        xmlNodePtr trav;
        xmlAttrPtr attr;
@@ -1215,15 +1219,15 @@
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"element")) {
-                       schema_element(sdl, tsn, trav, cur_type, newModel);
+                       schema_element(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"group")) {
-                       schema_group(sdl, tsn, trav, cur_type, newModel);
+                       schema_group(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"choice")) {
-                       schema_choice(sdl, tsn, trav, cur_type, newModel);
+                       schema_choice(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"sequence")) {
-                       schema_sequence(sdl, tsn, trav, cur_type, newModel);
+                       schema_sequence(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"any")) {
-                       schema_any(sdl, tsn, trav, cur_type, newModel);
+                       schema_any(sdl, tns, trav, cur_type, newModel);
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in choice",trav->name);
                }
@@ -1241,7 +1245,7 @@
   Content: (annotation?, (element | group | choice | sequence | any)*)
 </sequence>
 */
-static int schema_sequence(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr seqType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
+static int schema_sequence(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr seqType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
 {
        xmlNodePtr trav;
        xmlAttrPtr attr;
@@ -1281,15 +1285,15 @@
        }
        while (trav != NULL) {
                if (node_is_equal(trav,"element")) {
-                       schema_element(sdl, tsn, trav, cur_type, newModel);
+                       schema_element(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"group")) {
-                       schema_group(sdl, tsn, trav, cur_type, newModel);
+                       schema_group(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"choice")) {
-                       schema_choice(sdl, tsn, trav, cur_type, newModel);
+                       schema_choice(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"sequence")) {
-                       schema_sequence(sdl, tsn, trav, cur_type, newModel);
+                       schema_sequence(sdl, tns, trav, cur_type, newModel);
                } else if (node_is_equal(trav,"any")) {
-                       schema_any(sdl, tsn, trav, cur_type, newModel);
+                       schema_any(sdl, tns, trav, cur_type, newModel);
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in sequence",trav->name);
                }
@@ -1298,7 +1302,7 @@
        return TRUE;
 }
 
-static int schema_any(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
+static int schema_any(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr 
cur_type, sdlContentModelPtr model)
 {
        /* TODO: <any> support */
        return TRUE;
@@ -1312,7 +1316,7 @@
   Content: (annotation?, (restriction | extension))
 </complexContent>
 */
-static int schema_complexContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr compCont, 
sdlTypePtr cur_type)
+static int schema_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compCont, 
sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
 
@@ -1324,11 +1328,11 @@
        if (trav != NULL) {
                if (node_is_equal(trav, "restriction")) {
                        cur_type->kind = XSD_TYPEKIND_RESTRICTION;
-                       schema_restriction_complexContent(sdl, tsn, trav, cur_type);
+                       schema_restriction_complexContent(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else if (node_is_equal(trav, "extension")) {
                        cur_type->kind = XSD_TYPEKIND_EXTENSION;
-                       schema_extension_complexContent(sdl, tsn, trav, cur_type);
+                       schema_extension_complexContent(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else {
                        php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected 
<%s> in complexContent",trav->name);
@@ -1355,7 +1359,7 @@
   Content: (annotation?, (simpleContent | complexContent | ((group | all | choice | 
sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))
 </complexType>
 */
-static int schema_complexType(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr compType, 
sdlTypePtr cur_type)
+static int schema_complexType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compType, 
sdlTypePtr cur_type)
 {
        xmlNodePtr trav;
        xmlAttrPtr attrs, name, ns;
@@ -1364,7 +1368,7 @@
        attrs = compType->properties;
        ns = get_attribute(attrs, "targetNamespace");
        if (ns == NULL) {
-               ns = tsn;
+               ns = tns;
        }
 
        name = get_attribute(attrs, "name");
@@ -1425,30 +1429,30 @@
        }
        if (trav != NULL) {
                if (node_is_equal(trav,"simpleContent")) {
-                       schema_simpleContent(sdl, tsn, trav, cur_type);
+                       schema_simpleContent(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else if (node_is_equal(trav,"complexContent")) {
-                       schema_complexContent(sdl, tsn, trav, cur_type);
+                       schema_complexContent(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else {
                        if (node_is_equal(trav,"group")) {
-                               schema_group(sdl, tsn, trav, cur_type, NULL);
+                               schema_group(sdl, tns, trav, cur_type, NULL);
                                trav = trav->next;
                        } else if (node_is_equal(trav,"all")) {
-                               schema_all(sdl, tsn, trav, cur_type, NULL);
+                               schema_all(sdl, tns, trav, cur_type, NULL);
                                trav = trav->next;
                        } else if (node_is_equal(trav,"choice")) {
-                               schema_choice(sdl, tsn, trav, cur_type, NULL);
+                               schema_choice(sdl, tns, trav, cur_type, NULL);
                                trav = trav->next;
                        } else if (node_is_equal(trav,"sequence")) {
-                               schema_sequence(sdl, tsn, trav, cur_type, NULL);
+                               schema_sequence(sdl, tns, trav, cur_type, NULL);
                                trav = trav->next;
                        }
                        while (trav != NULL) {
                                if (node_is_equal(trav,"attribute")) {
-                                       schema_attribute(sdl, tsn, trav, cur_type, 
NULL);
+                                       schema_attribute(sdl, tns, trav, cur_type, 
NULL);
                                } else if (node_is_equal(trav,"attributeGroup")) {
-                                       schema_attributeGroup(sdl, tsn, trav, 
cur_type, NULL);
+                                       schema_attributeGroup(sdl, tns, trav, 
cur_type, NULL);
                                } else if (node_is_equal(trav,"anyAttribute")) {
                                        /* TODO: <anyAttribute> support */
                                        trav = trav->next;
@@ -1485,7 +1489,7 @@
   Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))
 </element>
 */
-static int schema_element(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr element, sdlTypePtr 
cur_type, sdlContentModelPtr model)
+static int schema_element(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr element, sdlTypePtr 
cur_type, sdlContentModelPtr model)
 {
        xmlNodePtr trav;
        xmlAttrPtr attrs, attr, ns, name, type, ref = NULL;
@@ -1493,7 +1497,7 @@
        attrs = element->properties;
        ns = get_attribute(attrs, "targetNamespace");
        if (ns == NULL) {
-               ns = tsn;
+               ns = tns;
        }
 
        name = get_attribute(attrs, "name");
@@ -1657,7 +1661,7 @@
                        } else if (type != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: 
element has both 'type' attribute and subtype");
                        }
-                       schema_simpleType(sdl, tsn, trav, cur_type);
+                       schema_simpleType(sdl, tns, trav, cur_type);
                        trav = trav->next;
                } else if (node_is_equal(trav,"complexType")) {
                        if (ref != NULL) {
@@ -1665,7 +1669,7 @@
                        } else if (type != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: 
element has both 'type' attribute and subtype");
                        }
-                       schema_complexType(sdl, tsn, trav, cur_type);
+                       schema_complexType(sdl, tns, trav, cur_type);
                        trav = trav->next;
                }
        }
@@ -1699,7 +1703,7 @@
   Content: (annotation?, (simpleType?))
 </attribute>
 */
-static int schema_attribute(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx)
+static int schema_attribute(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, 
sdlTypePtr cur_type, sdlCtx *ctx)
 {
        sdlAttributePtr newAttr;
        xmlAttrPtr attr, name, ref = NULL, type = NULL;
@@ -1736,7 +1740,7 @@
 
                        ns = get_attribute(attrType->properties, "targetNamespace");
                        if (ns == NULL) {
-                               ns = tsn;
+                               ns = tns;
                        }
                        if (ns != NULL) {
                                smart_str_appends(&key, ns->children->content);
@@ -1868,8 +1872,8 @@
                        dummy_type = emalloc(sizeof(sdlType));
                        memset(dummy_type, 0, sizeof(sdlType));
                        dummy_type->name = estrdup("anonymous");
-                       dummy_type->namens = estrdup(tsn->children->content);
-                       schema_simpleType(sdl, tsn, trav, dummy_type);
+                       dummy_type->namens = estrdup(tns->children->content);
+                       schema_simpleType(sdl, tns, trav, dummy_type);
                        newAttr->encode = dummy_type->encode;
                        delete_type(&dummy_type);
                        trav = trav->next;
@@ -1881,7 +1885,7 @@
        return TRUE;
 }
 
-static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr attrGroup, 
sdlTypePtr cur_type, sdlCtx *ctx)
+static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrGroup, 
sdlTypePtr cur_type, sdlCtx *ctx)
 {
        xmlNodePtr trav;
        xmlAttrPtr name, ref = NULL;
@@ -1899,7 +1903,7 @@
 
                        ns = get_attribute(attrGroup->properties, "targetNamespace");
                        if (ns == NULL) {
-                               ns = tsn;
+                               ns = tns;
                        }
                        newType = emalloc(sizeof(sdlType));
                        memset(newType, 0, sizeof(sdlType));
@@ -1955,12 +1959,12 @@
                        if (ref != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: 
attributeGroup has both 'ref' attribute and subattribute");
                        }
-                       schema_attribute(sdl, tsn, trav, cur_type, NULL);
+                       schema_attribute(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"attributeGroup")) {
                        if (ref != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: 
attributeGroup has both 'ref' attribute and subattribute");
                        }
-                       schema_attributeGroup(sdl, tsn, trav, cur_type, NULL);
+                       schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
                } else if (node_is_equal(trav,"anyAttribute")) {
                        if (ref != NULL) {
                                php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: 
attributeGroup has both 'ref' attribute and subattribute");

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug27722.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug27722.phpt
+++ php-src/ext/soap/tests/bugs/bug27722.phpt
--TEST--
Bug #27722 (Segfault on schema without targetNamespace)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--GET--
wsdl
--FILE--
<?php
$x = new SoapClient(dirname(__FILE__)."/bug27722.wsdl");
echo "ok\n";
?>
--EXPECT--
ok
http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug27722.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug27722.wsdl
+++ php-src/ext/soap/tests/bugs/bug27722.wsdl
<?xml version="1.0" ?>
<definitions
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
    xmlns:si="http://soapinterop.org/xsd";
    xmlns:tns="http://linuxsrv.home/~dmitry/soap/test.wsdl";
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
    xmlns="http://schemas.xmlsoap.org/wsdl/";
    targetNamespace="http://linuxsrv.home/~dmitry/soap/test.wsdl";>
  <types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
 <xsd:annotation>
  <xsd:documentation xml:lang="en">
   Purchase order schema for Example.com.
   Copyright 2000 Example.com. All rights reserved.
  </xsd:documentation>
 </xsd:annotation>

 <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

 <xsd:element name="comment" type="xsd:string"/>

 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element name="shipTo" type="USAddress"/>
   <xsd:element name="billTo" type="USAddress"/>
   <xsd:element ref="comment" minOccurs="0"/>
   <xsd:element name="items"  type="Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
 </xsd:complexType>

 <xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name"   type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city"   type="xsd:string"/>
   <xsd:element name="state"  type="xsd:string"/>
   <xsd:element name="zip"    type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="country" type="xsd:NMTOKEN"
     fixed="US"/>
 </xsd:complexType>

 <xsd:complexType name="Items">
  <xsd:sequence>
   <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="productName" type="xsd:string"/>
      <xsd:element name="quantity">
       <xsd:simpleType>
        <xsd:restriction base="xsd:positiveInteger">
         <xsd:maxExclusive value="100"/>
        </xsd:restriction>
       </xsd:simpleType>
      </xsd:element>
      <xsd:element name="USPrice"  type="xsd:decimal"/>
      <xsd:element ref="comment"   minOccurs="0"/>
      <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
     </xsd:sequence>
     <xsd:attribute name="partNum" type="SKU" use="required"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>

 <!-- Stock Keeping Unit, a code for identifying products -->
 <simpleType name="SKU">
  <restriction base="xsd:string">
   <pattern value="\d{3}-[A-Z]{2}"/>
  </restriction>
 </simpleType>

</xsd:schema>
</types>
  <portType name="TestServicePortType">
  </portType>

  <binding name="TestServiceBinding" type="tns:TestServicePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"; />
  </binding>

  <service name="TestService">
    <port name="TestServicePort" binding="tns:TestServiceBinding">
      <soap:address location="test://" />
    </port>
  </service>
</definitions>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to