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
This commit is contained in:
Daniel Veillard 2003-08-26 13:56:48 +00:00
parent 68f8fad71e
commit c1ffa0ab97
3 changed files with 28 additions and 0 deletions

View File

@ -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

View File

@ -365,6 +365,8 @@ struct _xmlRelaxNGValidCtxt {
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 @@ xmlRelaxNGValidateCompiledCallback(xmlRegExecCtxtPtr exec ATTRIBUTE_UNUSED,
return;
}
ret = xmlRelaxNGValidateDefinition(ctxt, define);
if (ret != 0)
ctxt->perr = ret;
}
/**
@ -7708,11 +7712,13 @@ xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
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 @@ xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
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 @@ xmlRelaxNGValidateState(xmlRelaxNGValidCtxtPtr ctxt,
}
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;
}

View File

@ -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