mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-07-30 22:43:14 +03:00
make sure we report errors if xmlNewInputFromFile() fails. avoid using
* libxml.h parserInternals.c xmlIO.c: make sure we report errors if xmlNewInputFromFile() fails. * xmlreader.c: avoid using _private for the node or document elements. Daniel
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>
|
||||||
|
|
||||||
|
* libxml.h parserInternals.c xmlIO.c: make sure we report errors
|
||||||
|
if xmlNewInputFromFile() fails.
|
||||||
|
* xmlreader.c: avoid using _private for the node or document
|
||||||
|
elements.
|
||||||
|
|
||||||
Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
|
Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
|
||||||
|
|
||||||
* win32/configure.js: added declaration for verMicroSuffix
|
* win32/configure.js: added declaration for verMicroSuffix
|
||||||
|
4
libxml.h
4
libxml.h
@ -44,5 +44,9 @@
|
|||||||
* function while checking if the callback exists.
|
* function while checking if the callback exists.
|
||||||
*/
|
*/
|
||||||
extern int __xmlRegisterCallbacks;
|
extern int __xmlRegisterCallbacks;
|
||||||
|
/*
|
||||||
|
* internal error reporting routines, shared but not partof the API.
|
||||||
|
*/
|
||||||
void __xmlIOErr(int domain, int code, const char *extra);
|
void __xmlIOErr(int domain, int code, const char *extra);
|
||||||
|
void __xmlLoaderErr(void *ctx, const char *msg, const char *filename);
|
||||||
#endif /* ! __XML_LIBXML_H__ */
|
#endif /* ! __XML_LIBXML_H__ */
|
||||||
|
@ -1445,8 +1445,11 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
|
|||||||
"new input from file: %s\n", filename);
|
"new input from file: %s\n", filename);
|
||||||
if (ctxt == NULL) return(NULL);
|
if (ctxt == NULL) return(NULL);
|
||||||
buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
|
buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
|
||||||
if (buf == NULL)
|
if (buf == NULL) {
|
||||||
|
__xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
|
||||||
|
(const char *) filename);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
inputStream = xmlNewInputStream(ctxt);
|
inputStream = xmlNewInputStream(ctxt);
|
||||||
if (inputStream == NULL) {
|
if (inputStream == NULL) {
|
||||||
|
19
xmlIO.c
19
xmlIO.c
@ -394,15 +394,16 @@ xmlIOErr(int code, const char *extra)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xmlLoaderErr:
|
* __xmlLoaderErr:
|
||||||
* @ctxt: the parser context
|
* @ctx: the parser context
|
||||||
* @extra: extra informations
|
* @extra: extra informations
|
||||||
*
|
*
|
||||||
* Handle a resource access error
|
* Handle a resource access error
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
xmlLoaderErr(xmlParserCtxtPtr ctxt, const char *msg, const char *filename)
|
__xmlLoaderErr(void *ctx, const char *msg, const char *filename)
|
||||||
{
|
{
|
||||||
|
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||||
xmlStructuredErrorFunc schannel = NULL;
|
xmlStructuredErrorFunc schannel = NULL;
|
||||||
xmlGenericErrorFunc channel = NULL;
|
xmlGenericErrorFunc channel = NULL;
|
||||||
void *data = NULL;
|
void *data = NULL;
|
||||||
@ -2985,10 +2986,10 @@ xmlCheckHTTPInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr ret) {
|
|||||||
if (code >= 400) {
|
if (code >= 400) {
|
||||||
/* fatal error */
|
/* fatal error */
|
||||||
if (ret->filename != NULL)
|
if (ret->filename != NULL)
|
||||||
xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
|
__xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
|
||||||
(const char *) ret->filename);
|
(const char *) ret->filename);
|
||||||
else
|
else
|
||||||
xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
|
__xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
|
||||||
xmlFreeInputStream(ret);
|
xmlFreeInputStream(ret);
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
} else {
|
} else {
|
||||||
@ -3149,14 +3150,10 @@ xmlDefaultExternalEntityLoader(const char *URL, const char *ID,
|
|||||||
if (resource == NULL) {
|
if (resource == NULL) {
|
||||||
if (ID == NULL)
|
if (ID == NULL)
|
||||||
ID = "NULL";
|
ID = "NULL";
|
||||||
xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID);
|
__xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
ret = xmlNewInputFromFile(ctxt, (const char *) resource);
|
ret = xmlNewInputFromFile(ctxt, (const char *) resource);
|
||||||
if (ret == NULL) {
|
|
||||||
xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
|
|
||||||
(const char *) resource);
|
|
||||||
}
|
|
||||||
if ((resource != NULL) && (resource != (xmlChar *) URL))
|
if ((resource != NULL) && (resource != (xmlChar *) URL))
|
||||||
xmlFree(resource);
|
xmlFree(resource);
|
||||||
return (ret);
|
return (ret);
|
||||||
|
39
xmlreader.c
39
xmlreader.c
@ -139,9 +139,8 @@ struct _xmlTextReader {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *xmlTextReaderIsEmpty = "This element is empty";
|
#define NODE_IS_EMPTY 0x1
|
||||||
static const char *xmlTextReaderIsEmptyPreserved = "Preserve this element";
|
#define NODE_IS_PRESERVED 0x2
|
||||||
static const char *xmlTextReaderIsPreserved = "Preserve this element";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CONSTSTR:
|
* CONSTSTR:
|
||||||
@ -529,7 +528,7 @@ xmlTextReaderStartElement(void *ctx, const xmlChar *fullname,
|
|||||||
if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
|
if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
|
||||||
(ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
|
(ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
|
||||||
(ctxt->input->cur[1] == '>'))
|
(ctxt->input->cur[1] == '>'))
|
||||||
ctxt->node->_private = (void *) xmlTextReaderIsEmpty;
|
ctxt->node->extra = NODE_IS_EMPTY;
|
||||||
}
|
}
|
||||||
if (reader != NULL)
|
if (reader != NULL)
|
||||||
reader->state = XML_TEXTREADER_ELEMENT;
|
reader->state = XML_TEXTREADER_ELEMENT;
|
||||||
@ -594,7 +593,7 @@ xmlTextReaderStartElementNs(void *ctx,
|
|||||||
if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
|
if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
|
||||||
(ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
|
(ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
|
||||||
(ctxt->input->cur[1] == '>'))
|
(ctxt->input->cur[1] == '>'))
|
||||||
ctxt->node->_private = (void *) xmlTextReaderIsEmpty;
|
ctxt->node->extra = NODE_IS_EMPTY;
|
||||||
}
|
}
|
||||||
if (reader != NULL)
|
if (reader != NULL)
|
||||||
reader->state = XML_TEXTREADER_ELEMENT;
|
reader->state = XML_TEXTREADER_ELEMENT;
|
||||||
@ -981,8 +980,7 @@ xmlTextReaderValidateEntity(xmlTextReaderPtr reader) {
|
|||||||
xmlNodePtr tmp;
|
xmlNodePtr tmp;
|
||||||
if (reader->entNr == 0) {
|
if (reader->entNr == 0) {
|
||||||
while ((tmp = node->last) != NULL) {
|
while ((tmp = node->last) != NULL) {
|
||||||
if ((tmp->_private != xmlTextReaderIsEmptyPreserved) &&
|
if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
|
||||||
(tmp->_private != xmlTextReaderIsPreserved)) {
|
|
||||||
xmlUnlinkNode(tmp);
|
xmlUnlinkNode(tmp);
|
||||||
xmlTextReaderFreeNode(reader, tmp);
|
xmlTextReaderFreeNode(reader, tmp);
|
||||||
} else
|
} else
|
||||||
@ -1105,8 +1103,6 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
|
|||||||
} while ((reader->ctxt->node == NULL) &&
|
} while ((reader->ctxt->node == NULL) &&
|
||||||
((reader->mode != XML_TEXTREADER_MODE_EOF) &&
|
((reader->mode != XML_TEXTREADER_MODE_EOF) &&
|
||||||
(reader->mode != XML_TEXTREADER_DONE)));
|
(reader->mode != XML_TEXTREADER_DONE)));
|
||||||
if (reader->ctxt->myDoc != NULL)
|
|
||||||
reader->ctxt->myDoc->_private = reader;
|
|
||||||
if (reader->ctxt->node == NULL) {
|
if (reader->ctxt->node == NULL) {
|
||||||
if (reader->ctxt->myDoc != NULL) {
|
if (reader->ctxt->myDoc != NULL) {
|
||||||
reader->node = reader->ctxt->myDoc->children;
|
reader->node = reader->ctxt->myDoc->children;
|
||||||
@ -1170,8 +1166,7 @@ get_next_node:
|
|||||||
if ((oldstate == XML_TEXTREADER_ELEMENT) &&
|
if ((oldstate == XML_TEXTREADER_ELEMENT) &&
|
||||||
(reader->node->type == XML_ELEMENT_NODE) &&
|
(reader->node->type == XML_ELEMENT_NODE) &&
|
||||||
(reader->node->children == NULL) &&
|
(reader->node->children == NULL) &&
|
||||||
(reader->node->_private != (void *)xmlTextReaderIsEmpty) &&
|
((reader->node->extra & NODE_IS_EMPTY) == 0)) {
|
||||||
(reader->node->_private != (void *)xmlTextReaderIsEmptyPreserved)) {
|
|
||||||
reader->state = XML_TEXTREADER_END;
|
reader->state = XML_TEXTREADER_END;
|
||||||
goto node_found;
|
goto node_found;
|
||||||
}
|
}
|
||||||
@ -1190,8 +1185,7 @@ get_next_node:
|
|||||||
(reader->node->prev->type != XML_DTD_NODE) &&
|
(reader->node->prev->type != XML_DTD_NODE) &&
|
||||||
(reader->entNr == 0)) {
|
(reader->entNr == 0)) {
|
||||||
xmlNodePtr tmp = reader->node->prev;
|
xmlNodePtr tmp = reader->node->prev;
|
||||||
if ((tmp->_private != xmlTextReaderIsEmptyPreserved) &&
|
if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
|
||||||
(tmp->_private != xmlTextReaderIsPreserved)) {
|
|
||||||
xmlUnlinkNode(tmp);
|
xmlUnlinkNode(tmp);
|
||||||
xmlTextReaderFreeNode(reader, tmp);
|
xmlTextReaderFreeNode(reader, tmp);
|
||||||
}
|
}
|
||||||
@ -1202,7 +1196,7 @@ get_next_node:
|
|||||||
if ((oldstate == XML_TEXTREADER_ELEMENT) &&
|
if ((oldstate == XML_TEXTREADER_ELEMENT) &&
|
||||||
(reader->node->type == XML_ELEMENT_NODE) &&
|
(reader->node->type == XML_ELEMENT_NODE) &&
|
||||||
(reader->node->children == NULL) &&
|
(reader->node->children == NULL) &&
|
||||||
(reader->node->_private != (void *)xmlTextReaderIsEmpty)) {
|
((reader->node->extra & NODE_IS_EMPTY) == 0)) {;
|
||||||
reader->state = XML_TEXTREADER_END;
|
reader->state = XML_TEXTREADER_END;
|
||||||
goto node_found;
|
goto node_found;
|
||||||
}
|
}
|
||||||
@ -1228,8 +1222,7 @@ get_next_node:
|
|||||||
* Cleanup of the old node
|
* Cleanup of the old node
|
||||||
*/
|
*/
|
||||||
if ((oldnode->type != XML_DTD_NODE) &&
|
if ((oldnode->type != XML_DTD_NODE) &&
|
||||||
(oldnode->_private != xmlTextReaderIsEmptyPreserved) &&
|
((oldnode->extra & NODE_IS_PRESERVED) == 0) &&
|
||||||
(oldnode->_private != xmlTextReaderIsPreserved) &&
|
|
||||||
(reader->entNr == 0)) {
|
(reader->entNr == 0)) {
|
||||||
xmlUnlinkNode(oldnode);
|
xmlUnlinkNode(oldnode);
|
||||||
xmlTextReaderFreeNode(reader, oldnode);
|
xmlTextReaderFreeNode(reader, oldnode);
|
||||||
@ -1370,9 +1363,7 @@ xmlTextReaderNext(xmlTextReaderPtr reader) {
|
|||||||
return(xmlTextReaderRead(reader));
|
return(xmlTextReaderRead(reader));
|
||||||
if (reader->state == XML_TEXTREADER_END)
|
if (reader->state == XML_TEXTREADER_END)
|
||||||
return(xmlTextReaderRead(reader));
|
return(xmlTextReaderRead(reader));
|
||||||
if (cur->_private == (void *)xmlTextReaderIsEmpty)
|
if (cur->extra & NODE_IS_EMPTY)
|
||||||
return(xmlTextReaderRead(reader));
|
|
||||||
if (cur->_private == (void *)xmlTextReaderIsEmptyPreserved)
|
|
||||||
return(xmlTextReaderRead(reader));
|
return(xmlTextReaderRead(reader));
|
||||||
do {
|
do {
|
||||||
ret = xmlTextReaderRead(reader);
|
ret = xmlTextReaderRead(reader);
|
||||||
@ -2561,8 +2552,7 @@ xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader) {
|
|||||||
return(0);
|
return(0);
|
||||||
if (reader->state == XML_TEXTREADER_END)
|
if (reader->state == XML_TEXTREADER_END)
|
||||||
return(0);
|
return(0);
|
||||||
return((reader->node->_private == (void *)xmlTextReaderIsEmpty) ||
|
return((reader->node->extra & NODE_IS_EMPTY) != 0);
|
||||||
(reader->node->_private == (void *)xmlTextReaderIsEmptyPreserved));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3361,14 +3351,11 @@ xmlTextReaderPreserve(xmlTextReaderPtr reader) {
|
|||||||
cur = reader->node;
|
cur = reader->node;
|
||||||
if (cur == NULL)
|
if (cur == NULL)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
if (cur->_private == (void *)xmlTextReaderIsEmpty)
|
cur->extra |= NODE_IS_PRESERVED;
|
||||||
cur->_private = (void *)xmlTextReaderIsEmptyPreserved;
|
|
||||||
else
|
|
||||||
cur->_private = (void *)xmlTextReaderIsPreserved;
|
|
||||||
|
|
||||||
parent = cur->parent;;
|
parent = cur->parent;;
|
||||||
while (parent != NULL) {
|
while (parent != NULL) {
|
||||||
parent->_private = (void *)xmlTextReaderIsPreserved;
|
parent->extra |= NODE_IS_PRESERVED;
|
||||||
parent = parent->parent;
|
parent = parent->parent;
|
||||||
}
|
}
|
||||||
return(cur);
|
return(cur);
|
||||||
|
Reference in New Issue
Block a user