diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2004-10-29 12:10:55 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2004-10-29 12:10:55 +0000 |
commit | eff45a92da861195551a2050487fcca0492cac7c (patch) | |
tree | 57150d0cbf7f5a1750e4d7cab403b8335a11da03 /valid.c | |
parent | c2f83d1fad48c4483f34213dcf6935e308e0c596 (diff) | |
download | libxml2-eff45a92da861195551a2050487fcca0492cac7c.tar.gz |
register xmlSchemaSetValidErrors, patch from Brent Hendricks in the
* python/libxml.c: register xmlSchemaSetValidErrors, patch from
Brent Hendricks in the mailing-list
* include/libxml/valid.h HTMLparser.c SAX2.c valid.c
parserInternals.c: fix #156626 and more generally how to find out
if a validation contect is part of a parsing context or not. This
can probably be improved to make 100% sure that vctxt->userData
is the parser context too. It's a bit hairy because we can't
change the xmlValidCtxt structure without breaking the ABI since
this change xmlParserCtxt information indexes.
Daniel
Diffstat (limited to 'valid.c')
-rw-r--r-- | valid.c | 35 |
1 files changed, 30 insertions, 5 deletions
@@ -59,7 +59,12 @@ xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra) if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; - pctxt = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + pctxt = ctxt->userData; + } } if (extra) __xmlRaiseError(NULL, channel, data, @@ -92,7 +97,12 @@ xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error, if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; - pctxt = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + pctxt = ctxt->userData; + } } if (extra) __xmlRaiseError(NULL, channel, data, @@ -132,7 +142,12 @@ xmlErrValidNode(xmlValidCtxtPtr ctxt, if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; - pctxt = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + pctxt = ctxt->userData; + } } __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error, XML_ERR_ERROR, NULL, 0, @@ -168,7 +183,12 @@ xmlErrValidNodeNr(xmlValidCtxtPtr ctxt, if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; - pctxt = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + pctxt = ctxt->userData; + } } __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error, XML_ERR_ERROR, NULL, 0, @@ -202,7 +222,12 @@ xmlErrValidWarning(xmlValidCtxtPtr ctxt, if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; - pctxt = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + pctxt = ctxt->userData; + } } __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error, XML_ERR_WARNING, NULL, 0, |