Fixed bug #341150, reported by Michael Romer. In
* xmlschemas.c: Fixed bug #341150, reported by Michael Romer.
In xmlSchemaBuildContentModelForSubstGroup(),
xmlAutomataNewOnceTrans2() was incorrectly used instead of
xmlAutomataNewTransition2() to mimic a xs:choice for
substitution-groups.
* test/schemas/subst-group-1_1.xsd
test/schemas/subst-group-1_0.xml
result/schemas/subst-group-1_0_1
result/schemas/subst-group-1_0_1.err: Added regression test
supplied by Michael Romer for bug #341150.
diff --git a/xmlschemas.c b/xmlschemas.c
index 6f8a39e..164191d 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -12551,9 +12551,21 @@
*/
for (i = 0; i < substGroup->members->nbItems; i++) {
member = (xmlSchemaElementPtr) substGroup->members->items[i];
- tmp = xmlAutomataNewOnceTrans2(pctxt->am, start, NULL,
- member->name, member->targetNamespace,
- 1, 1, member);
+ /*
+ * NOTE: This fixes bug #341150. xmlAutomataNewOnceTrans2()
+ * was incorrectly used instead of xmlAutomataNewTransition2()
+ * (seems like a copy&paste bug from the XML_SCHEMA_TYPE_ALL
+ * section in xmlSchemaBuildAContentModel() ).
+ * TODO: Check if xmlAutomataNewOnceTrans2() was instead
+ * intended for the above "counter" section originally. I.e.,
+ * check xs:all with subst-groups.
+ *
+ * tmp = xmlAutomataNewOnceTrans2(pctxt->am, start, NULL,
+ * member->name, member->targetNamespace,
+ * 1, 1, member);
+ */
+ tmp = xmlAutomataNewTransition2(pctxt->am, start, NULL,
+ member->name, member->targetNamespace, member);
xmlAutomataNewEpsilon(pctxt->am, tmp, end);
}
} else {