mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-06-24 01:41:40 +03:00
tried to fix the problems reported in bug #126735 fixed again some problem
* python/libxml.py: tried to fix the problems reported in bug #126735 * xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h: fixed again some problem trying to use the structured error handlers, c.f. bug #126735 * result/VC/ElementValid: tiny change due to the fix Daniel
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
Mon Dec 8 11:08:45 CET 2003 Daniel Veillard <daniel@veillard.com>
|
||||||
|
|
||||||
|
* python/libxml.py: tried to fix the problems reported in
|
||||||
|
bug #126735
|
||||||
|
* xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h:
|
||||||
|
fixed again some problem trying to use the structured error
|
||||||
|
handlers, c.f. bug #126735
|
||||||
|
* result/VC/ElementValid: tiny change due to the fix
|
||||||
|
|
||||||
Sun Dec 7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>
|
Sun Dec 7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>
|
||||||
|
|
||||||
* error.c: fixed __xmlRaiseError to use structured error handlers
|
* error.c: fixed __xmlRaiseError to use structured error handlers
|
||||||
|
53
SAX2.c
53
SAX2.c
@ -44,6 +44,37 @@
|
|||||||
"Unimplemented block at %s:%d\n", \
|
"Unimplemented block at %s:%d\n", \
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xmlValidError:
|
||||||
|
* @ctxt: an XML validation parser context
|
||||||
|
* @error: the error number
|
||||||
|
* @msg: the error message
|
||||||
|
* @str1: extra data
|
||||||
|
* @str2: extra data
|
||||||
|
*
|
||||||
|
* Handle a validation error
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
xmlErrValid(xmlParserCtxtPtr ctxt, xmlParserErrors error,
|
||||||
|
const char *msg, const char *str1, const char *str2)
|
||||||
|
{
|
||||||
|
xmlStructuredErrorFunc schannel = NULL;
|
||||||
|
|
||||||
|
if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
|
||||||
|
(ctxt->instate == XML_PARSER_EOF))
|
||||||
|
return;
|
||||||
|
ctxt->errNo = error;
|
||||||
|
if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
|
||||||
|
schannel = ctxt->sax->serror;
|
||||||
|
__xmlRaiseError(schannel,
|
||||||
|
ctxt->vctxt.error, ctxt->vctxt.userData,
|
||||||
|
ctxt, NULL, XML_FROM_DTD, error,
|
||||||
|
XML_ERR_ERROR, NULL, 0, (const char *) str1,
|
||||||
|
(const char *) str2, NULL, 0, 0,
|
||||||
|
msg, (const char *) str1, (const char *) str2);
|
||||||
|
ctxt->valid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xmlSAX2GetPublicId:
|
* xmlSAX2GetPublicId:
|
||||||
* @ctx: the user data (XML parser context)
|
* @ctx: the user data (XML parser context)
|
||||||
@ -1244,11 +1275,9 @@ process_external_subset:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (att == NULL) {
|
if (att == NULL) {
|
||||||
if (ctxt->vctxt.error != NULL)
|
xmlErrValid(ctxt, XML_DTD_STANDALONE_DEFAULTED,
|
||||||
ctxt->vctxt.error(ctxt->vctxt.userData,
|
|
||||||
"standalone: attribute %s on %s defaulted from external subset\n",
|
"standalone: attribute %s on %s defaulted from external subset\n",
|
||||||
fulln, attr->elem);
|
fulln, attr->elem);
|
||||||
ctxt->valid = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
attr = attr->nexth;
|
attr = attr->nexth;
|
||||||
@ -1370,13 +1399,9 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts)
|
|||||||
(ctxt->myDoc->intSubset->elements == NULL) &&
|
(ctxt->myDoc->intSubset->elements == NULL) &&
|
||||||
(ctxt->myDoc->intSubset->attributes == NULL) &&
|
(ctxt->myDoc->intSubset->attributes == NULL) &&
|
||||||
(ctxt->myDoc->intSubset->entities == NULL)))) {
|
(ctxt->myDoc->intSubset->entities == NULL)))) {
|
||||||
if (ctxt->vctxt.error != NULL) {
|
xmlErrValid(ctxt, XML_ERR_NO_DTD,
|
||||||
ctxt->vctxt.error(ctxt->vctxt.userData,
|
"Validation failed: no DTD found !", NULL, NULL);
|
||||||
"Validation failed: no DTD found !\n");
|
|
||||||
}
|
|
||||||
ctxt->validate = 0;
|
ctxt->validate = 0;
|
||||||
ctxt->valid = 0;
|
|
||||||
ctxt->errNo = XML_ERR_NO_DTD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1947,13 +1972,9 @@ xmlSAX2StartElementNs(void *ctx,
|
|||||||
(ctxt->myDoc->intSubset->elements == NULL) &&
|
(ctxt->myDoc->intSubset->elements == NULL) &&
|
||||||
(ctxt->myDoc->intSubset->attributes == NULL) &&
|
(ctxt->myDoc->intSubset->attributes == NULL) &&
|
||||||
(ctxt->myDoc->intSubset->entities == NULL)))) {
|
(ctxt->myDoc->intSubset->entities == NULL)))) {
|
||||||
if (ctxt->vctxt.error != NULL) {
|
xmlErrValid(ctxt, XML_ERR_NO_DTD,
|
||||||
ctxt->vctxt.error(ctxt->vctxt.userData,
|
"Validation failed: no DTD found !", NULL, NULL);
|
||||||
"Validation failed: no DTD found !\n");
|
|
||||||
}
|
|
||||||
ctxt->validate = 0;
|
ctxt->validate = 0;
|
||||||
ctxt->valid = 0;
|
|
||||||
ctxt->errNo = XML_ERR_NO_DTD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
4
error.c
4
error.c
@ -454,9 +454,9 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
|
|||||||
if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
|
if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
|
||||||
(ctxt->sax->initialized == XML_SAX2_MAGIC))
|
(ctxt->sax->initialized == XML_SAX2_MAGIC))
|
||||||
schannel = ctxt->sax->serror;
|
schannel = ctxt->sax->serror;
|
||||||
if (schannel == NULL)
|
|
||||||
schannel = xmlStructuredError;
|
|
||||||
}
|
}
|
||||||
|
if (schannel == NULL)
|
||||||
|
schannel = xmlStructuredError;
|
||||||
if ((domain == XML_FROM_VALID) &&
|
if ((domain == XML_FROM_VALID) &&
|
||||||
((channel == xmlParserValidityError) ||
|
((channel == xmlParserValidityError) ||
|
||||||
(channel == xmlParserValidityWarning))) {
|
(channel == xmlParserValidityWarning))) {
|
||||||
|
@ -234,6 +234,7 @@ typedef enum {
|
|||||||
XML_DTD_UNKNOWN_ENTITY, /* 535 */
|
XML_DTD_UNKNOWN_ENTITY, /* 535 */
|
||||||
XML_DTD_UNKNOWN_ID, /* 536 */
|
XML_DTD_UNKNOWN_ID, /* 536 */
|
||||||
XML_DTD_UNKNOWN_NOTATION, /* 537 */
|
XML_DTD_UNKNOWN_NOTATION, /* 537 */
|
||||||
|
XML_DTD_STANDALONE_DEFAULTED, /* 538 */
|
||||||
XML_HTML_STRUCURE_ERROR = 800,
|
XML_HTML_STRUCURE_ERROR = 800,
|
||||||
XML_HTML_UNKNOWN_TAG, /* 801 */
|
XML_HTML_UNKNOWN_TAG, /* 801 */
|
||||||
XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
|
XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
|
||||||
|
2
parser.c
2
parser.c
@ -426,7 +426,7 @@ xmlWarningMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
|
|||||||
* @msg: the error message
|
* @msg: the error message
|
||||||
* @str1: extra data
|
* @str1: extra data
|
||||||
*
|
*
|
||||||
* Handle a warning.
|
* Handle a validity error.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
xmlValidityError(xmlParserCtxtPtr ctxt, xmlParserErrors error,
|
xmlValidityError(xmlParserCtxtPtr ctxt, xmlParserErrors error,
|
||||||
|
@ -362,21 +362,25 @@ class xmlCore:
|
|||||||
ctxt.xpathFreeContext()
|
ctxt.xpathFreeContext()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
#
|
# #
|
||||||
# Selecting nodes using XPath, faster because the context
|
# # Selecting nodes using XPath, faster because the context
|
||||||
# is allocated just once per xmlDoc.
|
# # is allocated just once per xmlDoc.
|
||||||
#
|
# #
|
||||||
|
# # Removed: DV memleaks c.f. #126735
|
||||||
|
# #
|
||||||
|
# def xpathEval2(self, expr):
|
||||||
|
# doc = self.doc
|
||||||
|
# if doc == None:
|
||||||
|
# return None
|
||||||
|
# try:
|
||||||
|
# doc._ctxt.setContextNode(self)
|
||||||
|
# except:
|
||||||
|
# doc._ctxt = doc.xpathNewContext()
|
||||||
|
# doc._ctxt.setContextNode(self)
|
||||||
|
# res = doc._ctxt.xpathEval(expr)
|
||||||
|
# return res
|
||||||
def xpathEval2(self, expr):
|
def xpathEval2(self, expr):
|
||||||
doc = self.doc
|
return self.xpathEval(expr)
|
||||||
if doc == None:
|
|
||||||
return None
|
|
||||||
try:
|
|
||||||
doc._ctxt.setContextNode(self)
|
|
||||||
except:
|
|
||||||
doc._ctxt = doc.xpathNewContext()
|
|
||||||
doc._ctxt.setContextNode(self)
|
|
||||||
res = doc._ctxt.xpathEval(expr)
|
|
||||||
return res
|
|
||||||
|
|
||||||
# support for python2 iterators
|
# support for python2 iterators
|
||||||
def walk_depth_first(self):
|
def walk_depth_first(self):
|
||||||
@ -390,7 +394,7 @@ class xmlCore:
|
|||||||
self.doc._ctxt.xpathFreeContext()
|
self.doc._ctxt.xpathFreeContext()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
libxml2mod.freeDoc(self._o)
|
libxml2mod.xmlFreeDoc(self._o)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
./test/VC/ElementValid:3: validity error: Validation failed: no DTD found !
|
./test/VC/ElementValid:3: validity error : Validation failed: no DTD found !
|
||||||
<doc/>
|
<doc/>
|
||||||
^
|
^
|
||||||
|
2
valid.c
2
valid.c
@ -81,7 +81,7 @@ xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
|
|||||||
* Handle a validation error
|
* Handle a validation error
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
xmlErrValid(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlParserErrors error,
|
xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
|
||||||
const char *msg, const char *extra)
|
const char *msg, const char *extra)
|
||||||
{
|
{
|
||||||
xmlGenericErrorFunc channel = NULL;
|
xmlGenericErrorFunc channel = NULL;
|
||||||
|
15
xpath.c
15
xpath.c
@ -271,9 +271,7 @@ xmlXPathPErrMemory(xmlXPathParserContextPtr ctxt, const char *extra)
|
|||||||
void
|
void
|
||||||
xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
||||||
{
|
{
|
||||||
if (ctxt != NULL)
|
if (ctxt == NULL) {
|
||||||
ctxt->error = error;
|
|
||||||
if ((ctxt == NULL) || (ctxt->context == NULL)) {
|
|
||||||
__xmlRaiseError(NULL, NULL, NULL,
|
__xmlRaiseError(NULL, NULL, NULL,
|
||||||
NULL, NULL, XML_FROM_XPATH,
|
NULL, NULL, XML_FROM_XPATH,
|
||||||
error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
|
error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
|
||||||
@ -282,6 +280,17 @@ xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
|
|||||||
xmlXPathErrorMessages[error]);
|
xmlXPathErrorMessages[error]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ctxt->error = error;
|
||||||
|
if (ctxt->context == NULL) {
|
||||||
|
__xmlRaiseError(NULL, NULL, NULL,
|
||||||
|
NULL, NULL, XML_FROM_XPATH,
|
||||||
|
error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
|
||||||
|
XML_ERR_ERROR, NULL, 0,
|
||||||
|
(const char *) ctxt->base, NULL, NULL,
|
||||||
|
ctxt->cur - ctxt->base, 0,
|
||||||
|
xmlXPathErrorMessages[error]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ctxt->context->lastError.domain = XML_FROM_XPATH;
|
ctxt->context->lastError.domain = XML_FROM_XPATH;
|
||||||
ctxt->context->lastError.code = error + XML_XPATH_EXPRESSION_OK -
|
ctxt->context->lastError.code = error + XML_XPATH_EXPRESSION_OK -
|
||||||
XPATH_EXPRESSION_OK;
|
XPATH_EXPRESSION_OK;
|
||||||
|
Reference in New Issue
Block a user