The lesson of the day is
"never forget an epsilon transition or DocBook will raise it"
- valid.c: forgot an epsilon transition in for ()+
- test/VCM/v21.xml : added a specific test case
Daniel
diff --git a/ChangeLog b/ChangeLog
index 42b3b08..9c30481 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Apr 20 17:45:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: forgot an epsilon transition in for ()+
+ * test/VCM/v21.xml : added a specific test case
+
Fri Apr 20 15:46:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* valid.c: removed a state explosion exhibited by RSS
diff --git a/test/VCM/v21.xml b/test/VCM/v21.xml
new file mode 100644
index 0000000..4c8d923
--- /dev/null
+++ b/test/VCM/v21.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)+, c) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc><a/><b/><c/></doc>
diff --git a/valid.c b/valid.c
index b8077b4..4e9bcfb 100644
--- a/valid.c
+++ b/valid.c
@@ -3590,7 +3590,8 @@
if ((consumed) && (CONT != NULL) &&
(CONT->parent != NULL) &&
((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
- (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) {
+ (CONT->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ ((CONT->ocur == XML_ELEMENT_CONTENT_PLUS) && (OCCURENCE)))) {
DEBUG_VALID_MSG("saving parent branch");
vstateVPush(ctxt, CONT, NODE, DEPTH, OCCURS, ROLLBACK_PARENT);
}