diff options
Diffstat (limited to 'xmlreader.c')
-rw-r--r-- | xmlreader.c | 34 |
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; |