summaryrefslogtreecommitdiff
path: root/xmlreader.c
diff options
context:
space:
mode:
authorMike Hommey <mh@glandium.org>2004-09-10 05:26:00 +0000
committerMike Hommey <mh@glandium.org>2004-09-10 05:26:00 +0000
commit09deb06614c3408ec0816a3c88920138bae2083c (patch)
treea1b841a7dc28eecb98ca361c9371ecd1449a1908 /xmlreader.c
parentc14c53a3645d81281058d4bb4cff24fa8d6faf33 (diff)
downloadlibxml2-09deb06614c3408ec0816a3c88920138bae2083c.tar.gz
Load /tmp/tmp.BmUFjT/libxml2-2.6.13 intoupstream/2.6.13
packages/libxml2/branches/upstream/current.
Diffstat (limited to 'xmlreader.c')
-rw-r--r--xmlreader.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/xmlreader.c b/xmlreader.c
index f1ea238..58fbe2e 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -13,8 +13,6 @@
/*
* TODOs:
* - XML Schemas validation
- * - setting(s) for NoBlanks
- * - performances and tuning ...
*/
#define IN_LIBXML
#include "libxml.h"
@@ -825,7 +823,7 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
(const char *) &inbuf->content[reader->cur],
CHUNK_SIZE, 0);
reader->cur += CHUNK_SIZE;
- if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ if ((val != 0) || (reader->ctxt->wellFormed == 0))
return(-1);
} else {
s = inbuf->use - reader->cur;
@@ -833,7 +831,7 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
(const char *) &inbuf->content[reader->cur],
s, 0);
reader->cur += s;
- if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ if ((val != 0) || (reader->ctxt->wellFormed == 0))
return(-1);
break;
}
@@ -866,7 +864,7 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
s, 1);
reader->cur = inbuf->use;
reader->mode = XML_TEXTREADER_DONE;
- if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ if ((val != 0) || (reader->ctxt->wellFormed == 0))
return(-1);
}
}
@@ -1181,9 +1179,10 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
xmlTextReaderState oldstate = XML_TEXTREADER_START;
xmlNodePtr oldnode = NULL;
-
+
if (reader == NULL)
return(-1);
+ reader->curnode = NULL;
if (reader->doc != NULL)
return(xmlTextReaderReadTree(reader));
if (reader->ctxt == NULL)
@@ -1195,7 +1194,6 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
fprintf(stderr, "\nREAD ");
DUMP_READER
#endif
- reader->curnode = NULL;
if (reader->mode == XML_TEXTREADER_MODE_INITIAL) {
reader->mode = XML_TEXTREADER_MODE_INTERACTIVE;
/*
@@ -1343,6 +1341,8 @@ get_next_node:
if (reader->mode != XML_TEXTREADER_DONE) {
val = xmlParseChunk(reader->ctxt, "", 0, 1);
reader->mode = XML_TEXTREADER_DONE;
+ if (val != 0)
+ return(-1);
}
reader->node = NULL;
reader->depth = -1;
@@ -1388,7 +1388,8 @@ node_found:
(reader->node->next == NULL) &&
((reader->node->type == XML_TEXT_NODE) ||
(reader->node->type == XML_CDATA_SECTION_NODE))) {
- xmlTextReaderExpand(reader);
+ if (xmlTextReaderExpand(reader) == NULL)
+ return -1;
}
#ifdef LIBXML_XINCLUDE_ENABLED
@@ -1402,12 +1403,14 @@ node_found:
(xmlStrEqual(reader->node->ns->href, XINCLUDE_OLD_NS)))) {
if (reader->xincctxt == NULL) {
reader->xincctxt = xmlXIncludeNewContext(reader->ctxt->myDoc);
- xmlXIncludeSetFlags(reader->xincctxt, reader->parserFlags);
+ xmlXIncludeSetFlags(reader->xincctxt,
+ reader->parserFlags & (~XML_PARSE_NOXINCNODE));
}
/*
* expand that node and process it
*/
- xmlTextReaderExpand(reader);
+ if (xmlTextReaderExpand(reader) == NULL)
+ return -1;
xmlXIncludeProcessNode(reader->xincctxt, reader->node);
}
if (reader->node->type == XML_XINCLUDE_START) {
@@ -1874,8 +1877,15 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
ret->entNr = 0;
ret->input = input;
ret->buffer = xmlBufferCreateSize(100);
+ if (ret->buffer == NULL) {
+ xmlFree(ret);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextReader : malloc failed\n");
+ return(NULL);
+ }
ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
if (ret->sax == NULL) {
+ xmlBufferFree(ret->buffer);
xmlFree(ret);
xmlGenericError(xmlGenericErrorContext,
"xmlNewTextReader : malloc failed\n");
@@ -1925,6 +1935,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
if (ret->ctxt == NULL) {
xmlGenericError(xmlGenericErrorContext,
"xmlNewTextReader : malloc failed\n");
+ xmlBufferFree(ret->buffer);
xmlFree(ret->sax);
xmlFree(ret);
return(NULL);
@@ -3903,6 +3914,7 @@ xmlTextReaderGenericError(void *ctxt, xmlParserSeverities severity, char *str) {
xmlTextReaderPtr reader = (xmlTextReaderPtr)ctx->_private;
if (str != NULL) {
+ if (reader->errorFunc)
reader->errorFunc(reader->errorFuncArg,
str,
severity,
@@ -4002,6 +4014,7 @@ xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
reader->ctxt->sax->warning = xmlTextReaderWarning;
reader->ctxt->vctxt.warning = xmlTextReaderValidityWarning;
reader->errorFunc = f;
+ reader->sErrorFunc = NULL;
reader->errorFuncArg = arg;
}
else {
@@ -4031,6 +4044,7 @@ xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
xmlStructuredErrorFunc f,
void *arg) {
if (f != NULL) {
+ reader->ctxt->sax->error = NULL;
reader->ctxt->sax->serror = xmlTextReaderStructuredError;
reader->ctxt->vctxt.error = xmlTextReaderValidityError;
reader->ctxt->sax->warning = xmlTextReaderWarning;