summaryrefslogtreecommitdiff
path: root/ext/soap/php_schema.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/soap/php_schema.c')
-rw-r--r--ext/soap/php_schema.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c
index 5fa5a5ee91..e0921e3d03 100644
--- a/ext/soap/php_schema.c
+++ b/ext/soap/php_schema.c
@@ -121,6 +121,7 @@ static int schema_simpleType(sdlPtr *sdl, xmlAttrPtr tsn, xmlNodePtr simpleType,
}
ht = cur_type->elements;
smart_str_appends(&key, cur_type->name);
+ smart_str_0(&key);
}
zend_hash_add(ht, key.c, key.len + 1, &newType, sizeof(sdlTypePtr), (void **)&ptr);
@@ -316,22 +317,30 @@ static int schema_restriction_complexContent(sdlPtr *sdl, xmlAttrPtr tsn, xmlNod
if(trav->type == XML_ELEMENT_NODE) {
if(!strcmp(trav->name, "group")) {
schema_group(sdl, tsn, trav, cur_type);
- return TRUE;
+ break;
} else if(!strcmp(trav->name, "all")) {
schema_all(sdl, tsn, trav, cur_type);
- return TRUE;
+ break;
} else if(!strcmp(trav->name, "choice")) {
schema_choice(sdl, tsn, trav, cur_type);
- return TRUE;
+ break;
} else if(!strcmp(trav->name, "sequence")) {
schema_sequence(sdl, tsn, trav, cur_type);
- return TRUE;
+ break;
} else if(!strcmp(trav->name, "attribute")) {
schema_attribute(sdl, tsn, trav, cur_type);
}
}
trav = trav->next;
}
+ while (trav != NULL) {
+ if(trav->type == XML_ELEMENT_NODE) {
+ if(!strcmp(trav->name, "attribute")) {
+ schema_attribute(sdl, tsn, trav, cur_type);
+ }
+ }
+ trav = trav->next;
+ }
return TRUE;
}
@@ -773,6 +782,7 @@ static int schema_complexType(sdlPtr *sdl, xmlAttrPtr tsn, xmlNodePtr compType,
}
ht = cur_type->elements;
smart_str_appends(&key, newType->name);
+ smart_str_0(&key);
}
zend_hash_add(ht, key.c, key.len + 1, &newType, sizeof(sdlTypePtr), (void **)&ptr);
@@ -1055,6 +1065,7 @@ static int schema_attribute(sdlPtr *sdl, xmlAttrPtr tsn, xmlNodePtr attrType, sd
smart_str_free(&key);
return TRUE;
}
+ smart_str_free(&key);
}
zend_hash_next_index_insert(cur_type->attributes, &newAttr, sizeof(sdlAttributePtr), NULL);