fixed bug #120386 again a problem introduced when trying to reuse automata
* relaxng.c: fixed bug #120386 again a problem introduced when
trying to reuse automata for content validation. Fix a bug report
problem on zeroOrMore
* result/relaxng/tutor3_7_err: change slightly error reporting.
Daniel
diff --git a/ChangeLog b/ChangeLog
index f1c7741..50b75d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed bug #120386 again a problem introduced when
+ trying to reuse automata for content validation. Fix a bug report
+ problem on zeroOrMore
+ * result/relaxng/tutor3_7_err: change slightly error reporting.
+
Mon Aug 25 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
* include/libxml/Makefile.am: make sure the new header will
diff --git a/relaxng.c b/relaxng.c
index cdcc079..28d1a60 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -365,6 +365,8 @@
int pstate; /* progressive state */
xmlNodePtr pnode; /* the current node */
xmlRelaxNGDefinePtr pdef; /* the non-streamable definition */
+ int perr; /* signal error in content model
+ outside the regexp */
};
/**
@@ -7690,6 +7692,8 @@
return;
}
ret = xmlRelaxNGValidateDefinition(ctxt, define);
+ if (ret != 0)
+ ctxt->perr = ret;
}
/**
@@ -7708,11 +7712,13 @@
xmlRegExecCtxtPtr exec;
xmlNodePtr cur;
int ret = 0;
+ int oldperr = ctxt->perr;
if ((ctxt == NULL) || (regexp == NULL))
return(-1);
exec = xmlRegNewExecCtxt(regexp,
xmlRelaxNGValidateCompiledCallback, ctxt);
+ ctxt->perr = 0;
cur = content;
while (cur != NULL) {
ctxt->state->seq = cur;
@@ -7762,6 +7768,14 @@
ret = -1;
}
xmlRegFreeExecCtxt(exec);
+ /*
+ * There might be content model errors outside of the pure
+ * regexp validation, e.g. for attribute values.
+ */
+ if ((ret == 0) && (ctxt->perr != 0)) {
+ ret = ctxt->perr;
+ }
+ ctxt->perr = oldperr;
return(ret);
}
@@ -9777,8 +9791,13 @@
}
ctxt->states = res;
ctxt->flags = oldflags;
+#if 0
+ /*
+ * errors may have to be propagated back...
+ */
if (ctxt->errNr > errNr)
xmlRelaxNGPopErrors(ctxt, errNr);
+#endif
ret = 0;
break;
}
diff --git a/result/relaxng/tutor3_7_err b/result/relaxng/tutor3_7_err
index 24088bb..b30a3c4 100644
--- a/result/relaxng/tutor3_7_err
+++ b/result/relaxng/tutor3_7_err
@@ -1,4 +1,6 @@
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
+Expecting an element , got nothing
+RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Element element failed to validate content