mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
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
This commit is contained in:
35
valid.c
35
valid.c
@@ -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,
|
||||
|
Reference in New Issue
Block a user