1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-03-25 10:50:08 +03:00

Fix an unimplemented part in RNG value validation

Forgot to implement <optional> this was raised again
in https://bugzilla.redhat.com/show_bug.cgi?id=752393
as this make libxml2 fail to validate against ODF RNGs

Daniel
This commit is contained in:
Daniel Veillard 2011-11-10 18:08:33 +08:00
parent 1d4526f6f4
commit 7dd0d916c6

View File

@ -8884,6 +8884,11 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
case XML_RELAXNG_ZEROORMORE:{
xmlChar *cur, *temp;
if ((ctxt->state->value == NULL) ||
(*ctxt->state->value == 0)) {
ret = 0;
break;
}
oldflags = ctxt->flags;
ctxt->flags |= FLAGS_IGNORABLE;
cur = ctxt->state->value;
@ -8905,6 +8910,30 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGPopErrors(ctxt, 0);
break;
}
case XML_RELAXNG_OPTIONAL:{
xmlChar *temp;
if ((ctxt->state->value == NULL) ||
(*ctxt->state->value == 0)) {
ret = 0;
break;
}
oldflags = ctxt->flags;
ctxt->flags |= FLAGS_IGNORABLE;
temp = ctxt->state->value;
ret = xmlRelaxNGValidateValue(ctxt, define->content);
ctxt->flags = oldflags;
if (ret != 0) {
ctxt->state->value = temp;
if (ctxt->errNr > 0)
xmlRelaxNGPopErrors(ctxt, 0);
ret = 0;
break;
}
if (ctxt->errNr > 0)
xmlRelaxNGPopErrors(ctxt, 0);
break;
}
case XML_RELAXNG_EXCEPT:{
xmlRelaxNGDefinePtr list;