diff --git a/HTMLparser.c b/HTMLparser.c index 843b497d..2376113f 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -58,9 +58,9 @@ static void htmlParseComment(htmlParserCtxtPtr ctxt); * Handle a redefinition of attribute error */ static void -htmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra) +htmlErrMemory(xmlParserCtxtPtr ctxt) { - xmlErrMemory(ctxt, extra); + xmlCtxtErrMemory(ctxt); } /** @@ -127,7 +127,7 @@ htmlnamePush(htmlParserCtxtPtr ctxt, const xmlChar * value) tmp = xmlRealloc((xmlChar **) ctxt->nameTab, newSize * sizeof(ctxt->nameTab[0])); if (tmp == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return (-1); } ctxt->nameTab = tmp; @@ -185,7 +185,7 @@ htmlNodeInfoPush(htmlParserCtxtPtr ctxt, htmlParserNodeInfo *value) ctxt->nodeInfoMax * sizeof(ctxt->nodeInfoTab[0])); if (ctxt->nodeInfoTab == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return (0); } } @@ -343,7 +343,7 @@ htmlFindEncoding(xmlParserCtxtPtr ctxt) { return(NULL); ret = xmlStrndup(start, cur - start); if (ret == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(ret); } @@ -1996,7 +1996,7 @@ static const htmlEntityDesc html40EntitiesTable[] = { buffer##_size *= 2; \ tmp = (xmlChar *) xmlRealloc(buffer, buffer##_size); \ if (tmp == NULL) { \ - htmlErrMemory(ctxt, "growing buffer\n"); \ + htmlErrMemory(ctxt); \ xmlFree(buffer); \ return(NULL); \ } \ @@ -2273,7 +2273,7 @@ htmlNewInputStream(htmlParserCtxtPtr ctxt) { input = (xmlParserInputPtr) xmlMalloc(sizeof(htmlParserInput)); if (input == NULL) { - htmlErrMemory(ctxt, "couldn't allocate a new input stream\n"); + htmlErrMemory(ctxt); return(NULL); } memset(input, 0, sizeof(htmlParserInput)); @@ -2518,7 +2518,7 @@ htmlParseHTMLName(htmlParserCtxtPtr ctxt) { ret = xmlDictLookup(ctxt->dict, loc, i); if (ret == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(ret); } @@ -2554,7 +2554,7 @@ htmlParseHTMLName_nonInvasive(htmlParserCtxtPtr ctxt) { ret = xmlDictLookup(ctxt->dict, loc, i); if (ret == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(ret); } @@ -2599,7 +2599,7 @@ htmlParseName(htmlParserCtxtPtr ctxt) { count = in - ctxt->input->cur; ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); if (ret == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); ctxt->input->cur = in; ctxt->input->col += count; return(ret); @@ -2659,7 +2659,7 @@ htmlParseNameComplex(xmlParserCtxtPtr ctxt) { ret = xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len); if (ret == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(ret); } @@ -2694,7 +2694,7 @@ htmlParseHTMLAttribute(htmlParserCtxtPtr ctxt, const xmlChar stop) { buffer_size = HTML_PARSER_BUFFER_SIZE; buffer = (xmlChar *) xmlMallocAtomic(buffer_size); if (buffer == NULL) { - htmlErrMemory(ctxt, "buffer allocation failed\n"); + htmlErrMemory(ctxt); return(NULL); } out = buffer; @@ -2959,7 +2959,7 @@ htmlParseSystemLiteral(htmlParserCtxtPtr ctxt) { if (err == 0) { ret = xmlStrndup((BASE_PTR+startPosition), len); if (ret == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(NULL); } } @@ -3020,7 +3020,7 @@ htmlParsePubidLiteral(htmlParserCtxtPtr ctxt) { if (err == 0) { ret = xmlStrndup((BASE_PTR + startPosition), len); if (ret == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(NULL); } } @@ -3330,7 +3330,7 @@ htmlParsePI(htmlParserCtxtPtr ctxt) { } buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return; } cur = CUR; @@ -3347,7 +3347,7 @@ htmlParsePI(htmlParserCtxtPtr ctxt) { size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); xmlFree(buf); return; } @@ -3428,7 +3428,7 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { SKIP(4); buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - htmlErrMemory(ctxt, "buffer allocation failed\n"); + htmlErrMemory(ctxt); return; } len = 0; @@ -3472,7 +3472,7 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { xmlFree(buf); - htmlErrMemory(ctxt, "growing buffer failed\n"); + htmlErrMemory(ctxt); return; } buf = tmp; @@ -3746,7 +3746,7 @@ htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) { encoding ++; copy = xmlStrdup(encoding); if (copy == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); xmlSetDeclaredEncoding(ctxt, copy); } } @@ -3781,7 +3781,7 @@ htmlCheckMeta(htmlParserCtxtPtr ctxt, const xmlChar **atts) { copy = xmlStrdup(value); if (copy == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); xmlSetDeclaredEncoding(ctxt, copy); } else if (!xmlStrcasecmp(att, BAD_CAST "content")) { content = value; @@ -3926,7 +3926,7 @@ htmlParseStartTag(htmlParserCtxtPtr ctxt) { atts = (const xmlChar **) xmlMalloc(maxatts * sizeof(xmlChar *)); if (atts == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); if (attvalue != NULL) xmlFree(attvalue); goto failed; @@ -3940,7 +3940,7 @@ htmlParseStartTag(htmlParserCtxtPtr ctxt) { n = (const xmlChar **) xmlRealloc((void *) atts, maxatts * sizeof(const xmlChar *)); if (n == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); if (attvalue != NULL) xmlFree(attvalue); goto failed; @@ -4591,7 +4591,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { } else { currentNode = xmlStrdup(ctxt->name); if (currentNode == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return; } } @@ -4613,7 +4613,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { } else { currentNode = xmlStrdup(ctxt->name); if (currentNode == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); break; } } @@ -4642,7 +4642,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { } else { currentNode = xmlStrdup(ctxt->name); if (currentNode == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); break; } } @@ -4673,7 +4673,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { } else { currentNode = xmlStrdup(ctxt->name); if (currentNode == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); break; } } @@ -4732,7 +4732,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { } else { currentNode = xmlStrdup(ctxt->name); if (currentNode == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); break; } } @@ -4901,7 +4901,7 @@ htmlParseDocument(htmlParserCtxtPtr ctxt) { BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN", BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd"); if (ctxt->myDoc->intSubset == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); } } if (! ctxt->wellFormed) return(-1); @@ -5786,7 +5786,7 @@ done: BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN", BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd"); if (ctxt->myDoc->intSubset == NULL) - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); } } return(ret); @@ -6722,7 +6722,7 @@ htmlCtxtReadMemory(htmlParserCtxtPtr ctxt, const char *buffer, int size, input = xmlParserInputBufferCreateStatic(buffer, size, XML_CHAR_ENCODING_NONE); if (input == NULL) { - htmlErrMemory(ctxt, NULL); + htmlErrMemory(ctxt); return(NULL); } diff --git a/SAX2.c b/SAX2.c index a0d6ca0a..5c156044 100644 --- a/SAX2.c +++ b/SAX2.c @@ -31,29 +31,14 @@ #include "private/parser.h" #include "private/tree.h" -/** - * TODO: - * - * macro to flag unimplemented blocks - * XML_CATALOG_PREFER user env to select between system/public preferred - * option. C.f. Richard Tobin - *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with - *> values "system" and "public". I have made the default be "system" to - *> match yours. - */ -#define TODO \ - xmlGenericError(xmlGenericErrorContext, \ - "Unimplemented block at %s:%d\n", \ - __FILE__, __LINE__); - /* * xmlSAX2ErrMemory: * @ctxt: an XML validation parser context * @msg: a string to accompany the error message */ -static void LIBXML_ATTR_FORMAT(2,0) -xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) { - xmlErrMemory(ctxt, msg); +static void +xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt) { + xmlCtxtErrMemory(ctxt); } /** @@ -271,7 +256,7 @@ xmlSAX2InternalSubset(void *ctx, const xmlChar *name, ctxt->myDoc->intSubset = xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID); if (ctxt->myDoc->intSubset == NULL) - xmlSAX2ErrMemory(ctxt, "xmlSAX2InternalSubset"); + xmlSAX2ErrMemory(ctxt); } /** @@ -316,7 +301,7 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name, } if (xmlNewDtd(ctxt->myDoc, name, ExternalID, SystemID) == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); xmlFreeInputStream(input); return; } @@ -336,7 +321,7 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name, ctxt->inputTab = (xmlParserInputPtr *) xmlMalloc(5 * sizeof(xmlParserInputPtr)); if (ctxt->inputTab == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2ExternalSubset"); + xmlSAX2ErrMemory(ctxt); xmlFreeInputStream(input); ctxt->input = oldinput; ctxt->inputNr = oldinputNr; @@ -431,7 +416,7 @@ xmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId base = ctxt->directory; if (xmlBuildURISafe(systemId, (const xmlChar *) base, &URI) < 0) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); ret = xmlLoadExternalEntity((const char *) URI, (const char *) publicId, ctxt); @@ -538,7 +523,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, case XML_ERR_OK: break; case XML_ERR_NO_MEMORY: - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; case XML_WAR_ENTITY_REDEFINED: if (ctxt->pedantic) { @@ -576,7 +561,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, if (base != NULL) { if (xmlBuildURISafe(systemId, (const xmlChar *) base, &URI) < 0) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); else ent->URI = URI; } @@ -623,7 +608,7 @@ xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname, /* TODO: optimize name/prefix allocation */ name = xmlSplitQName(ctxt, fullname, &prefix); if (name == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); ctxt->vctxt.valid = 1; if (ctxt->inSubset == 1) attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, elem, @@ -799,7 +784,7 @@ xmlSAX2StartDocument(void *ctx) if (ctxt->myDoc == NULL) ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL); if (ctxt->myDoc == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument"); + xmlSAX2ErrMemory(ctxt); return; } ctxt->myDoc->properties = XML_DOC_HTML; @@ -815,7 +800,7 @@ xmlSAX2StartDocument(void *ctx) doc->parseFlags = ctxt->options; doc->standalone = ctxt->standalone; } else { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument"); + xmlSAX2ErrMemory(ctxt); return; } if ((ctxt->dictNames) && (doc != NULL)) { @@ -823,7 +808,7 @@ xmlSAX2StartDocument(void *ctx) xmlDictReference(doc->dict); } if (xmlTreeEnsureXMLDecl(doc) == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } } @@ -831,7 +816,7 @@ xmlSAX2StartDocument(void *ctx) (ctxt->input != NULL) && (ctxt->input->filename != NULL)) { ctxt->myDoc->URL = xmlPathToURI((const xmlChar *)ctxt->input->filename); if (ctxt->myDoc->URL == NULL) - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument"); + xmlSAX2ErrMemory(ctxt); } } @@ -871,7 +856,7 @@ xmlSAX2EndDocument(void *ctx) if (encoding != NULL) { doc->encoding = xmlStrdup(encoding); if (doc->encoding == NULL) - xmlSAX2ErrMemory(ctxt, "xmlSAX2EndDocument"); + xmlSAX2ErrMemory(ctxt); } } } @@ -945,7 +930,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, } } if (name == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); if (ns != NULL) xmlFree(ns); return; @@ -956,7 +941,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, (value == NULL) && (htmlIsBooleanAttr(fullname))) { nval = xmlStrdup(fullname); if (nval == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); value = (const xmlChar *) nval; } else #endif @@ -999,7 +984,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, 0,0,0); ctxt->depth--; if (val == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); if (name != NULL) xmlFree(name); if (nval != NULL) @@ -1014,7 +999,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, xmlURIPtr uri; if (xmlParseURISafe((const char *)val, &uri) < 0) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); if (uri == NULL) { xmlNsWarnMsg(ctxt, XML_WAR_NS_URI, "xmlns:%s: %s not a valid URI\n", name, value); @@ -1031,7 +1016,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, /* a default namespace definition */ nsret = xmlNewNs(ctxt->node, val, NULL); if (nsret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } #ifdef LIBXML_VALID_ENABLED /* @@ -1067,7 +1052,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, 0,0,0); ctxt->depth--; if (val == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); xmlFree(ns); if (name != NULL) xmlFree(name); @@ -1087,7 +1072,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, xmlURIPtr uri; if (xmlParseURISafe((const char *)val, &uri) < 0) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); if (uri == NULL) { xmlNsWarnMsg(ctxt, XML_WAR_NS_URI, "xmlns:%s: %s not a valid URI\n", name, value); @@ -1105,7 +1090,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, xmlFree(ns); if (nsret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } #ifdef LIBXML_VALID_ENABLED /* @@ -1163,7 +1148,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, /* !!!!!! */ ret = xmlNewNsPropEatName(ctxt->node, namespace, name, NULL); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); goto error; } @@ -1173,7 +1158,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, if ((value != NULL) && (value[0] != 0)) { ret->children = xmlStringGetNodeList(ctxt->myDoc, value); if (ret->children == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } tmp = ret->children; while (tmp != NULL) { @@ -1185,7 +1170,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, } else if (value != NULL) { ret->children = xmlNewDocText(ctxt->myDoc, value); if (ret->children == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } else { ret->last = ret->children; ret->children->parent = (xmlNodePtr) ret; @@ -1265,7 +1250,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, int res = xmlIsID(ctxt->myDoc, ctxt->node, ret); if (res < 0) - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); else if (res > 0) xmlAddID(&ctxt->vctxt, ctxt->myDoc, content, ret); else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) @@ -1328,7 +1313,7 @@ process_external_subset: fulln = xmlStrdup(attr->name); } if (fulln == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); break; } @@ -1394,7 +1379,7 @@ process_external_subset: fulln = xmlBuildQName(attr->name, attr->prefix, fn, 50); if (fulln == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); return; } @@ -1479,7 +1464,7 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts) */ name = xmlSplitQName(ctxt, fullname, &prefix); if (name == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } } @@ -1492,7 +1477,7 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts) ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, name, NULL); if (ret == NULL) { xmlFree(prefix); - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); + xmlSAX2ErrMemory(ctxt); return; } ctxt->nodemem = -1; @@ -1566,7 +1551,7 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts) prefix, NULL); ns = xmlNewNs(ret, NULL, prefix); if (ns == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } /* @@ -1687,7 +1672,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) { ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode)); } if (ret == NULL) { - xmlErrMemory(ctxt, "xmlSAX2Characters"); + xmlCtxtErrMemory(ctxt); return(NULL); } memset(ret, 0, sizeof(xmlNode)); @@ -1709,7 +1694,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) { ((cur == '<') && (str[len + 1] != '!')))) { intern = xmlDictLookup(ctxt->dict, str, len); if (intern == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2TextNode"); + xmlSAX2ErrMemory(ctxt); xmlFree(ret); return(NULL); } @@ -1722,7 +1707,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) { } intern = xmlDictLookup(ctxt->dict, str, len); if (intern == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2TextNode"); + xmlSAX2ErrMemory(ctxt); xmlFree(ret); return(NULL); } @@ -1735,7 +1720,7 @@ skip: if (intern == NULL) { ret->content = xmlStrndup(str, len); if (ret->content == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2TextNode"); + xmlSAX2ErrMemory(ctxt); xmlFree(ret); return(NULL); } @@ -1825,7 +1810,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, } else { ret = xmlMalloc(sizeof(*ret)); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return(NULL); } } @@ -1851,7 +1836,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, } else { ret->name = xmlStrdup(localname); if (ret->name == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) @@ -1877,7 +1862,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, ret->children = xmlStringLenGetNodeList(ctxt->myDoc, value, valueend - value); if (ret->children == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); tmp = ret->children; while (tmp != NULL) { tmp->doc = ret->doc; @@ -1920,7 +1905,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, */ dup = xmlStrndup(value, valueend - value); if (dup == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc, ctxt->node, ret, dup); @@ -1966,7 +1951,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, */ dup = xmlStrndup(value, valueend - value); if (dup == NULL) - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc, ctxt->node, ret, dup); @@ -2003,7 +1988,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, int res = xmlIsID(ctxt->myDoc, ctxt->node, ret); if (res < 0) - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); else if (res > 0) xmlAddID(&ctxt->vctxt, ctxt->myDoc, content, ret); else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) @@ -2076,14 +2061,14 @@ xmlSAX2StartElementNs(void *ctx, fullname = xmlDictQLookup(ctxt->dict, prefix, localname); if (fullname == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } localname = fullname; } else { lname = xmlBuildQName(localname, prefix, NULL, 0); if (lname == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } } @@ -2107,7 +2092,7 @@ xmlSAX2StartElementNs(void *ctx, else ret->name = lname; if (ret->name == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs"); + xmlSAX2ErrMemory(ctxt); xmlFree(ret); return; } @@ -2124,7 +2109,7 @@ xmlSAX2StartElementNs(void *ctx, ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, (xmlChar *) lname, NULL); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs"); + xmlSAX2ErrMemory(ctxt); return; } } @@ -2154,7 +2139,7 @@ xmlSAX2StartElementNs(void *ctx, if ((URI != NULL) && (prefix == pref)) ret->ns = ns; } else { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); continue; } @@ -2209,7 +2194,7 @@ xmlSAX2StartElementNs(void *ctx, ns = xmlNewNs(ret, NULL, prefix); if (ns == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs"); + xmlSAX2ErrMemory(ctxt); return; } if (prefix != NULL) @@ -2242,7 +2227,7 @@ xmlSAX2StartElementNs(void *ctx, fullname = xmlDictQLookup(ctxt->dict, attributes[j+1], attributes[j]); if (fullname == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } attr = xmlSAX2AttributeNs(ctxt, fullname, NULL, @@ -2253,7 +2238,7 @@ xmlSAX2StartElementNs(void *ctx, lname = xmlBuildQName(attributes[j], attributes[j+1], NULL, 0); if (lname == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } attr = xmlSAX2AttributeNs(ctxt, lname, NULL, @@ -2351,7 +2336,7 @@ xmlSAX2Reference(void *ctx, const xmlChar *name) if (ctx == NULL) return; ret = xmlNewReference(ctxt->myDoc, name); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } if (xmlAddChild(ctxt->node, ret) == NULL) { @@ -2403,7 +2388,7 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, int len, ctxt->nodelen = len; ctxt->nodemem = len + 1; } else { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters"); + xmlSAX2ErrMemory(ctxt); return; } } else { @@ -2427,16 +2412,16 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, int len, lastChild->content = xmlStrdup(lastChild->content); } if (lastChild->content == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: xmlStrdup returned NULL"); + xmlSAX2ErrMemory(ctxt); return; } if (ctxt->nodelen > INT_MAX - len) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented"); + xmlSAX2ErrMemory(ctxt); return; } if ((ctxt->nodelen + len > XML_MAX_TEXT_LENGTH) && ((ctxt->options & XML_PARSE_HUGE) == 0)) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node"); + xmlSAX2ErrMemory(ctxt); return; } if (ctxt->nodelen + len >= ctxt->nodemem) { @@ -2449,7 +2434,7 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, int len, size = size > INT_MAX / 2 ? INT_MAX : size * 2; newbuf = (xmlChar *) xmlRealloc(lastChild->content,size); if (newbuf == NULL) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters"); + xmlSAX2ErrMemory(ctxt); return; } ctxt->nodemem = size; @@ -2460,7 +2445,7 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, int len, lastChild->content[ctxt->nodelen] = 0; } else if (coalesceText) { if (xmlTextConcat(lastChild, ch, len)) { - xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters"); + xmlSAX2ErrMemory(ctxt); } if (ctxt->node->children != NULL) { ctxt->nodelen = xmlStrlen(lastChild->content); @@ -2475,7 +2460,7 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, int len, } else lastChild = xmlNewCDataBlock(ctxt->myDoc, ch, len); if (lastChild == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); } else { xmlAddChild(ctxt->node, lastChild); if (ctxt->node->children != NULL) { @@ -2549,7 +2534,7 @@ xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target, ret = xmlNewDocPI(ctxt->myDoc, target, data); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } @@ -2597,7 +2582,7 @@ xmlSAX2Comment(void *ctx, const xmlChar *value) parent = ctxt->node; ret = xmlNewDocComment(ctxt->myDoc, value); if (ret == NULL) { - xmlSAX2ErrMemory(ctxt, NULL); + xmlSAX2ErrMemory(ctxt); return; } if (ctxt->linenumbers) { diff --git a/fuzz/fuzz.c b/fuzz/fuzz.c index f8571c9a..8a939197 100644 --- a/fuzz/fuzz.c +++ b/fuzz/fuzz.c @@ -378,14 +378,14 @@ xmlFuzzEntityLoader(const char *URL, const char *ID ATTRIBUTE_UNUSED, return(NULL); input->filename = (char *) xmlCharStrdup(URL); if (input->filename == NULL) { - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); xmlFreeInputStream(input); return(NULL); } input->buf = xmlParserInputBufferCreateMem(entity->data, entity->size, XML_CHAR_ENCODING_NONE); if (input->buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); xmlFreeInputStream(input); return(NULL); } diff --git a/globals.c b/globals.c index 04e7964f..01dca8d6 100644 --- a/globals.c +++ b/globals.c @@ -272,8 +272,7 @@ const int oldXMLWDcompatibility = 0; /* DEPRECATED */ * while handling entities. * Disabled by default */ -int xmlParserDebugEntities = 0; -static int xmlParserDebugEntitiesThrDef = 0; +const int xmlParserDebugEntities = 0; /** * xmlDoValidityCheckingDefaultValue: * @@ -782,7 +781,6 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) { gs->gs_xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef; gs->gs_xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef; gs->gs_xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef; - gs->gs_xmlParserDebugEntities = xmlParserDebugEntitiesThrDef; gs->gs_xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef; gs->gs_xmlSubstituteEntitiesDefaultValue = xmlSubstituteEntitiesDefaultValueThrDef; @@ -907,6 +905,11 @@ __oldXMLWDcompatibility(void) { return &oldXMLWDcompatibility; } +const int * +__xmlParserDebugEntities(void) { + return &xmlParserDebugEntities; +} + const xmlSAXLocator * __xmlDefaultSAXLocator(void) { return &xmlDefaultSAXLocator; @@ -1124,13 +1127,8 @@ int xmlThrDefLoadExtDtdDefaultValue(int v) { return ret; } -int xmlThrDefParserDebugEntities(int v) { - int ret; - xmlMutexLock(&xmlThrDefMutex); - ret = xmlParserDebugEntitiesThrDef; - xmlParserDebugEntitiesThrDef = v; - xmlMutexUnlock(&xmlThrDefMutex); - return ret; +int xmlThrDefParserDebugEntities(int v ATTRIBUTE_UNUSED) { + return(xmlParserDebugEntities); } int xmlThrDefPedanticParserDefaultValue(int v) { diff --git a/include/libxml/parser.h b/include/libxml/parser.h index 98259371..ebf5fdeb 100644 --- a/include/libxml/parser.h +++ b/include/libxml/parser.h @@ -325,6 +325,9 @@ struct _xmlParserCtxt { xmlParserNsData *nsdb; /* namespace database */ unsigned attrHashMax; /* allocated size */ xmlAttrHashBucket *attrHash; /* atttribute hash table */ + + xmlStructuredErrorFunc errorHandler; + void *errorCtxt; }; /** @@ -844,6 +847,8 @@ XMLPUBVAR const char *const xmlParserVersion; XML_DEPRECATED XMLPUBVAR const int oldXMLWDcompatibility; XML_DEPRECATED +XMLPUBVAR const int xmlParserDebugEntities; +XML_DEPRECATED XMLPUBVAR const xmlSAXLocator xmlDefaultSAXLocator; #ifdef LIBXML_SAX1_ENABLED XML_DEPRECATED @@ -856,6 +861,8 @@ XMLPUBFUN const char *const *__xmlParserVersion(void); XML_DEPRECATED XMLPUBFUN const int *__oldXMLWDcompatibility(void); XML_DEPRECATED +XMLPUBFUN const int *__xmlParserDebugEntities(void); +XML_DEPRECATED XMLPUBFUN const xmlSAXLocator *__xmlDefaultSAXLocator(void); #ifdef LIBXML_SAX1_ENABLED XML_DEPRECATED @@ -870,7 +877,6 @@ XMLPUBFUN const xmlSAXHandlerV1 *__xmlDefaultSAXHandler(void); XML_OP(xmlKeepBlanksDefaultValue, int, XML_DEPRECATED) \ XML_OP(xmlLineNumbersDefaultValue, int, XML_DEPRECATED) \ XML_OP(xmlLoadExtDtdDefaultValue, int, XML_DEPRECATED) \ - XML_OP(xmlParserDebugEntities, int, XML_DEPRECATED) \ XML_OP(xmlPedanticParserDefaultValue, int, XML_DEPRECATED) \ XML_OP(xmlSubstituteEntitiesDefaultValue, int, XML_DEPRECATED) @@ -903,7 +909,6 @@ XML_GLOBALS_PARSER #define xmlLineNumbersDefaultValue \ XML_GLOBAL_MACRO(xmlLineNumbersDefaultValue) #define xmlLoadExtDtdDefaultValue XML_GLOBAL_MACRO(xmlLoadExtDtdDefaultValue) - #define xmlParserDebugEntities XML_GLOBAL_MACRO(xmlParserDebugEntities) #define xmlPedanticParserDefaultValue \ XML_GLOBAL_MACRO(xmlPedanticParserDefaultValue) #define xmlSubstituteEntitiesDefaultValue \ @@ -1270,6 +1275,10 @@ XMLPUBFUN int XMLPUBFUN int xmlCtxtUseOptions (xmlParserCtxtPtr ctxt, int options); +XMLPUBFUN void + xmlCtxtSetErrorHandler (xmlParserCtxtPtr ctxt, + xmlStructuredErrorFunc handler, + void *data); XMLPUBFUN void xmlCtxtSetMaxAmplification(xmlParserCtxtPtr ctxt, unsigned maxAmpl); diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h index 5657046d..88d84acb 100644 --- a/include/libxml/parserInternals.h +++ b/include/libxml/parserInternals.h @@ -314,8 +314,7 @@ XMLPUBFUN xmlParserCtxtPtr const xmlChar *ID, const xmlChar *base); XMLPUBFUN void - xmlErrMemory (xmlParserCtxtPtr ctxt, - const char *extra); + xmlCtxtErrMemory (xmlParserCtxtPtr ctxt); XMLPUBFUN int xmlSwitchEncoding (xmlParserCtxtPtr ctxt, xmlCharEncoding enc); diff --git a/include/private/parser.h b/include/private/parser.h index 159541a4..487da2ae 100644 --- a/include/private/parser.h +++ b/include/private/parser.h @@ -28,6 +28,8 @@ #define PARSER_STOPPED(ctxt) ((ctxt)->disableSAX > 1) +XML_HIDDEN void +xmlErrMemory(xmlParserCtxtPtr ctxt); XML_HIDDEN void xmlVErrParser(xmlParserCtxtPtr ctxt, xmlNodePtr node, int domain, int code, xmlErrorLevel level, diff --git a/parser.c b/parser.c index dda19204..f47df139 100644 --- a/parser.c +++ b/parser.c @@ -229,6 +229,11 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); * * ************************************************************************/ +void +xmlErrMemory(xmlParserCtxtPtr ctxt) { + xmlCtxtErrMemory(ctxt); +} + /** * xmlErrAttributeDup: * @ctxt: an XML parser context @@ -761,7 +766,7 @@ xmlDetectSAX2(xmlParserCtxtPtr ctxt) { ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || (ctxt->str_xml_ns == NULL)) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } } @@ -871,7 +876,7 @@ xmlAttrNormalizeSpace2(xmlParserCtxtPtr ctxt, xmlChar *src, int *len) ret = xmlStrndup(src + remove_head, i - remove_head + 1); if (ret == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } xmlAttrNormalizeSpace(ret, ret); @@ -1002,7 +1007,7 @@ xmlAddDefAttrs(xmlParserCtxtPtr ctxt, return; mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } @@ -1033,7 +1038,7 @@ xmlAddSpecialAttr(xmlParserCtxtPtr ctxt, return; mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } @@ -1527,7 +1532,7 @@ xmlParserNsGrow(xmlParserCtxtPtr ctxt) { return(0); error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } @@ -1556,7 +1561,7 @@ xmlParserNsPush(xmlParserCtxtPtr ctxt, const xmlHashedString *prefix, return(0); if ((ctxt->nsNr >= ctxt->nsMax) && (xmlParserNsGrow(ctxt) < 0)) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } @@ -1622,13 +1627,13 @@ xmlParserNsPush(xmlParserCtxtPtr ctxt, const xmlHashedString *prefix, unsigned newSize, i, index; if (ctxt->nsdb->hashSize > UINT_MAX / 2) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } newSize = ctxt->nsdb->hashSize ? ctxt->nsdb->hashSize * 2 : 16; newHash = xmlMalloc(newSize * sizeof(newHash[0])); if (newHash == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } memset(newHash, 0, newSize * sizeof(newHash[0])); @@ -1756,7 +1761,7 @@ xmlCtxtGrowAttrs(xmlParserCtxtPtr ctxt, int nr) { } return(ctxt->maxatts); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } @@ -1781,7 +1786,7 @@ inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value) tmp = (xmlParserInputPtr *) xmlRealloc(ctxt->inputTab, newSize * sizeof(*tmp)); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return (-1); } ctxt->inputTab = tmp; @@ -1839,7 +1844,7 @@ nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value) ctxt->nodeMax * 2 * sizeof(ctxt->nodeTab[0])); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return (-1); } ctxt->nodeTab = tmp; @@ -1940,7 +1945,7 @@ nameNsPush(xmlParserCtxtPtr ctxt, const xmlChar * value, tag->nsNr = nsNr; return (ctxt->nameNr++); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return (-1); } #ifdef LIBXML_PUSH_ENABLED @@ -2001,7 +2006,7 @@ namePush(xmlParserCtxtPtr ctxt, const xmlChar * value) ctxt->name = value; return (ctxt->nameNr++); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return (-1); } @@ -2040,7 +2045,7 @@ static int spacePush(xmlParserCtxtPtr ctxt, int val) { tmp = (int *) xmlRealloc(ctxt->spaceTab, ctxt->spaceMax * sizeof(ctxt->spaceTab[0])); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); ctxt->spaceMax /=2; return(-1); } @@ -2296,9 +2301,6 @@ xmlPopInput(xmlParserCtxtPtr ctxt) { xmlParserInputPtr input; if ((ctxt == NULL) || (ctxt->inputNr <= 1)) return(0); - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "Popping input %d\n", ctxt->inputNr); input = inputPop(ctxt); if (input->entity != NULL) input->entity->flags &= ~XML_ENT_EXPANDING; @@ -2322,14 +2324,6 @@ xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) { int ret; if (input == NULL) return(-1); - if (xmlParserDebugEntities) { - if ((ctxt->input != NULL) && (ctxt->input->filename)) - xmlGenericError(xmlGenericErrorContext, - "%s(%d): ", ctxt->input->filename, - ctxt->input->line); - xmlGenericError(xmlGenericErrorContext, - "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur); - } if (((ctxt->inputNr > 40) && ((ctxt->options & XML_PARSE_HUGE) == 0)) || (ctxt->inputNr > 100)) { xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); @@ -2718,10 +2712,6 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, growBuffer(buffer, XML_PARSER_BUFFER_SIZE); } } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) { - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "String decoding Entity Reference: %.30s\n", - str); ent = xmlParseStringEntityRef(ctxt, &str); if ((ent != NULL) && (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { @@ -2780,9 +2770,6 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, buffer[nbchars++] = ';'; } } else if (c == '%' && (what & XML_SUBSTITUTE_PEREF)) { - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "String decoding PE Reference: %.30s\n", str); ent = xmlParseStringPEReference(ctxt, &str); if (ent != NULL) { if (ent->content == NULL) { @@ -2852,7 +2839,7 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, return(buffer); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); int_error: if (rep != NULL) xmlFree(rep); @@ -3076,7 +3063,7 @@ xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefixOut) { buffer = (xmlChar *) xmlMallocAtomic(max); if (buffer == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } memcpy(buffer, buf, len); @@ -3088,7 +3075,7 @@ xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefixOut) { tmp = (xmlChar *) xmlRealloc(buffer, max); if (tmp == NULL) { xmlFree(buffer); - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } buffer = tmp; @@ -3108,7 +3095,7 @@ xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefixOut) { if (buffer == NULL) { ret = xmlStrndup(buf, len); if (ret == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } } else { @@ -3163,7 +3150,7 @@ xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefixOut) { buffer = (xmlChar *) xmlMallocAtomic(max); if (buffer == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(prefix); return(NULL); } @@ -3175,7 +3162,7 @@ xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefixOut) { max *= 2; tmp = (xmlChar *) xmlRealloc(buffer, max); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(prefix); xmlFree(buffer); return(NULL); @@ -3406,7 +3393,7 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) { else ret = xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len); if (ret == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(ret); } @@ -3463,7 +3450,7 @@ xmlParseName(xmlParserCtxtPtr ctxt) { ctxt->input->cur = in; ctxt->input->col += count; if (ret == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(ret); } } @@ -3507,7 +3494,7 @@ xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) { } ret = xmlDictLookupHashed(ctxt->dict, (BASE_PTR + startPosition), len); if (ret.name == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(ret); } @@ -3564,7 +3551,7 @@ xmlParseNCName(xmlParserCtxtPtr ctxt) { ctxt->input->cur = in; ctxt->input->col += count; if (ret.name == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } return(ret); } @@ -3663,7 +3650,7 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { buffer = (xmlChar *) xmlMallocAtomic(max); if (buffer == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } memcpy(buffer, buf, len); @@ -3674,7 +3661,7 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { max *= 2; tmp = (xmlChar *) xmlRealloc(buffer, max); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(buffer); return(NULL); } @@ -3701,7 +3688,7 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { *str = cur; ret = xmlStrndup(buf, len); if (ret == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(ret); } @@ -3746,7 +3733,7 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { buffer = (xmlChar *) xmlMallocAtomic(max); if (buffer == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } memcpy(buffer, buf, len); @@ -3757,7 +3744,7 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { max *= 2; tmp = (xmlChar *) xmlRealloc(buffer, max); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(buffer); return(NULL); } @@ -3784,7 +3771,7 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { } ret = xmlStrndup(buf, len); if (ret == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(ret); } @@ -3825,7 +3812,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { } buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } @@ -3855,7 +3842,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } buf = tmp; @@ -4188,7 +4175,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { return(buf); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); error: if (buf != NULL) xmlFree(buf); @@ -4277,7 +4264,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } ctxt->instate = XML_PARSER_SYSTEM_LITERAL; @@ -4290,7 +4277,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { xmlFree(buf); - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } buf = tmp; @@ -4352,7 +4339,7 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { } buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } ctxt->instate = XML_PARSER_PUBLIC_LITERAL; @@ -4365,7 +4352,7 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(buf); return(NULL); } @@ -4798,7 +4785,7 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, size = XML_PARSER_BUFFER_SIZE; buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } } @@ -4841,7 +4828,7 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, new_buf = (xmlChar *) xmlRealloc(buf, new_size); if (new_buf == NULL) { xmlFree (buf); - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } buf = new_buf; @@ -4973,7 +4960,7 @@ get_more: size = XML_PARSER_BUFFER_SIZE + nbchar; buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } len = 0; @@ -4983,7 +4970,7 @@ get_more: new_buf = (xmlChar *) xmlRealloc(buf, size); if (new_buf == NULL) { xmlFree (buf); - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } buf = new_buf; @@ -5229,7 +5216,7 @@ xmlParsePI(xmlParserCtxtPtr ctxt) { } buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } if (SKIP_BLANKS == 0) { @@ -5244,7 +5231,7 @@ xmlParsePI(xmlParserCtxtPtr ctxt) { size_t new_size = size * 2; tmp = (xmlChar *) xmlRealloc(buf, new_size); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(buf); return; } @@ -5473,7 +5460,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { xmlURIPtr uri; if (xmlParseURISafe((const char *) URI, &uri) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } else if (uri == NULL) { /* * This really ought to be a well formedness error @@ -5515,7 +5502,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { if (ctxt->myDoc == NULL) { ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, "New Doc failed"); + xmlErrMemory(ctxt); goto done; } ctxt->myDoc->properties = XML_DOC_INTERNAL; @@ -5524,7 +5511,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "fake", NULL, NULL); if (ctxt->myDoc->intSubset == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto done; } } @@ -5541,7 +5528,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { xmlURIPtr uri; if (xmlParseURISafe((const char *) URI, &uri) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } else if (uri == NULL) { /* * This really ought to be a well formedness error @@ -5590,7 +5577,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { if (ctxt->myDoc == NULL) { ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, "New Doc failed"); + xmlErrMemory(ctxt); goto done; } ctxt->myDoc->properties = XML_DOC_INTERNAL; @@ -5600,7 +5587,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "fake", NULL, NULL); if (ctxt->myDoc->intSubset == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto done; } } @@ -5773,7 +5760,7 @@ xmlParseNotationType(xmlParserCtxtPtr ctxt) { if (tmp == NULL) { cur = xmlCreateEnumeration(name); if (cur == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFreeEnumeration(ret); return(NULL); } @@ -5845,7 +5832,7 @@ xmlParseEnumerationType(xmlParserCtxtPtr ctxt) { if (!xmlDictOwns(ctxt->dict, name)) xmlFree(name); if (cur == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFreeEnumeration(ret); return(NULL); } @@ -6212,7 +6199,7 @@ xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) { return(ret); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFreeDocElementContent(ctxt->myDoc, ret); return(NULL); } @@ -6285,7 +6272,7 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, } cur = ret = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); if (cur == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } GROW; @@ -6328,7 +6315,7 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_SEQ); if (op == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if ((last != NULL) && (last != ret)) xmlFreeDocElementContent(ctxt->myDoc, last); xmlFreeDocElementContent(ctxt->myDoc, ret); @@ -6369,7 +6356,7 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); if (op == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if ((last != NULL) && (last != ret)) xmlFreeDocElementContent(ctxt->myDoc, last); if (ret != NULL) @@ -6425,7 +6412,7 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, } last = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); if (last == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if (ret != NULL) xmlFreeDocElementContent(ctxt->myDoc, ret); return(NULL); @@ -6769,7 +6756,7 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) { tmp = (int *) xmlRealloc(inputIds, inputIdsSize * sizeof(int)); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } inputIds = tmp; @@ -6803,7 +6790,7 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) { ignoreDepth++; /* Check for integer overflow */ if (ignoreDepth == 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } } else if ((RAW == ']') && (NXT(1) == ']') && @@ -6958,7 +6945,7 @@ xmlParseTextDecl(xmlParserCtxtPtr ctxt) { if (version == NULL) { version = xmlCharStrdup(XML_DEFAULT_VERSION); if (version == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } } else { @@ -7034,14 +7021,14 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID, if (ctxt->myDoc == NULL) { ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, "New Doc failed"); + xmlErrMemory(ctxt); return; } ctxt->myDoc->properties = XML_DOC_INTERNAL; } if ((ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset == NULL) && (xmlCreateIntSubset(ctxt->myDoc, NULL, ExternalID, SystemID) == NULL)) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } ctxt->instate = XML_PARSER_DTD; @@ -7416,7 +7403,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { while (cur != NULL) { nw = xmlDocCopyNode(cur, ctxt->myDoc, 1); if (nw == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } else { if (nw->_private == NULL) nw->_private = cur->_private; @@ -7425,7 +7412,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { } nw = xmlAddChild(ctxt->node, nw); if (nw == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } if (cur == ent->last) { /* @@ -7466,7 +7453,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { cur->parent = NULL; nw = xmlDocCopyNode(cur, ctxt->myDoc, 1); if (nw == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } else { if (nw->_private == NULL) nw->_private = cur->_private; @@ -7474,10 +7461,10 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { firstChild = cur; } if (xmlAddChild((xmlNodePtr) ent, nw) == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } if (xmlAddChild(ctxt->node, cur) == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if (cur == last) break; cur = next; @@ -7934,9 +7921,6 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt) xmlFatalErrMsg(ctxt, XML_ERR_PEREF_NO_NAME, "PEReference: no name\n"); return; } - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "PEReference: %s\n", name); if (RAW != ';') { xmlFatalErr(ctxt, XML_ERR_PEREF_SEMICOL_MISSING, NULL); return; @@ -8076,10 +8060,6 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { return(-1); } - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "Reading %s entity content input\n", entity->name); - input = xmlLoadExternalEntity((char *) entity->URI, (char *) entity->ExternalID, ctxt); if (input == NULL) { @@ -8102,7 +8082,7 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { ctxt->progressive = 0; ctxt->inputTab = xmlMalloc(sizeof(xmlParserInputPtr)); if (ctxt->inputTab == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFreeInputStream(input); goto error; } @@ -8146,7 +8126,7 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { content = xmlBufDetach(input->buf->buffer); if (length > INT_MAX) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } @@ -8622,7 +8602,7 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) { atts = (const xmlChar **) xmlMalloc(maxatts * sizeof(xmlChar *)); if (atts == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if (attvalue != NULL) xmlFree(attvalue); goto failed; @@ -8636,7 +8616,7 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) { n = (const xmlChar **) xmlRealloc((void *) atts, maxatts * sizeof(const xmlChar *)); if (n == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); if (attvalue != NULL) xmlFree(attvalue); goto failed; @@ -8825,7 +8805,7 @@ xmlParseQNameHashed(xmlParserCtxtPtr ctxt, xmlHashedString *prefix) { l = xmlDictLookupHashed(ctxt->dict, BASE_PTR + start, CUR_PTR - (BASE_PTR + start)); if (l.name == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(l); } xmlNsErr(ctxt, XML_NS_ERR_QNAME, @@ -9100,7 +9080,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc, if (alloc) *alloc = 1; ret = xmlStrndup(start, last - start); if (ret == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } } @@ -9244,7 +9224,7 @@ xmlParseAttribute2(xmlParserCtxtPtr ctxt, return (hname); mem_error: - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); error: if ((val != NULL) && (*alloc != 0)) xmlFree(val); @@ -9361,7 +9341,7 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref, attval = 0; if (xmlParserNsStartElement(ctxt->nsdb) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } @@ -9432,12 +9412,12 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref, huri = xmlDictLookupHashed(ctxt->dict, attvalue, len); uri = huri.name; if (uri == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto next_attr; } if (*uri != 0) { if (xmlParseURISafe((const char *) uri, &parsedUri) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto next_attr; } if (parsedUri == NULL) { @@ -9479,7 +9459,7 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref, huri = xmlDictLookupHashed(ctxt->dict, attvalue, len); uri = huri.name; if (uri == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto next_attr; } @@ -9523,7 +9503,7 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref, goto next_attr; } else { if (xmlParseURISafe((const char *) uri, &parsedUri) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto next_attr; } if (parsedUri == NULL) { @@ -9683,7 +9663,7 @@ next_attr: tmp = xmlRealloc(ctxt->attrHash, attrHashSize * sizeof(tmp[0])); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto done; } @@ -10006,7 +9986,7 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) { cur = CUR_CHAR(l); buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto out; } while (IS_CHAR(cur) && @@ -10016,7 +9996,7 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) { tmp = (xmlChar *) xmlRealloc(buf, size * 2); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto out; } buf = tmp; @@ -10385,7 +10365,7 @@ xmlParseVersionNum(xmlParserCtxtPtr ctxt) { buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } cur = CUR; @@ -10411,7 +10391,7 @@ xmlParseVersionNum(xmlParserCtxtPtr ctxt) { tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { xmlFree(buf); - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } buf = tmp; @@ -10500,7 +10480,7 @@ xmlParseEncName(xmlParserCtxtPtr ctxt) { ((cur >= 'A') && (cur <= 'Z'))) { buf = (xmlChar *) xmlMallocAtomic(size); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } @@ -10518,7 +10498,7 @@ xmlParseEncName(xmlParserCtxtPtr ctxt) { size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size); if (tmp == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); xmlFree(buf); return(NULL); } @@ -10897,7 +10877,7 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) { } else { ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); if (ctxt->version == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } } @@ -11499,14 +11479,14 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) { } else { ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); if (ctxt->version == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); break; } } } else { ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); if (ctxt->version == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); break; } } @@ -11888,7 +11868,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) { break; } default: - xmlGenericError(xmlGenericErrorContext, + xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, "PP: internal error\n"); ctxt->instate = XML_PARSER_EOF; break; @@ -12244,7 +12224,7 @@ xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input, ctxt->inSubset = 2; ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, "New Doc failed"); + xmlErrMemory(ctxt); return(NULL); } ctxt->myDoc->properties = XML_DOC_INTERNAL; @@ -12357,7 +12337,7 @@ xmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID, ctxt->inSubset = 2; ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, "New Doc failed"); + xmlErrMemory(ctxt); xmlFreeParserCtxt(ctxt); return(NULL); } @@ -12511,7 +12491,7 @@ xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt, newDoc = xmlNewDoc(BAD_CAST "1.0"); if (newDoc == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); goto error; } newDoc->properties = XML_DOC_INTERNAL; @@ -12525,14 +12505,14 @@ xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt, if (doc->URL != NULL) { newDoc->URL = xmlStrdup(doc->URL); if (newDoc->URL == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); goto error; } } } newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL); if (newRoot == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); goto error; } xmlAddChild((xmlNodePtr) newDoc, newRoot); @@ -12668,7 +12648,7 @@ error: if (ctxt->disableSAX > oldctxt->disableSAX) oldctxt->disableSAX = ctxt->disableSAX; if (xmlCopyError(&ctxt->lastError, &oldctxt->lastError) < 0) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); } } @@ -12788,14 +12768,18 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt, ctxt = xmlCreateDocParserCtxt(string); if (ctxt == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); return(XML_ERR_NO_MEMORY); } + if (oldctxt->errorHandler != NULL) + xmlCtxtSetErrorHandler(ctxt, oldctxt->errorHandler, + oldctxt->errorCtxt); + if (oldctxt->myDoc == NULL) { newDoc = xmlNewDoc(BAD_CAST "1.0"); if (newDoc == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); ret = XML_ERR_NO_MEMORY; goto error; } @@ -12810,7 +12794,7 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt, } newRoot = xmlNewDocNode(ctxt->myDoc, NULL, BAD_CAST "pseudoroot", NULL); if (newRoot == NULL) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); ret = XML_ERR_NO_MEMORY; goto error; } @@ -12911,7 +12895,7 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt, if (ctxt->disableSAX > oldctxt->disableSAX) oldctxt->disableSAX = ctxt->disableSAX; if (xmlCopyError(&ctxt->lastError, &oldctxt->lastError) < 0) { - xmlErrMemory(oldctxt, NULL); + xmlErrMemory(oldctxt); ret = XML_ERR_NO_MEMORY; } } else { @@ -13437,11 +13421,14 @@ xmlCreateEntityParserCtxtInternal(xmlSAXHandlerPtr sax, void *userData, ctxt = xmlNewSAXParserCtxt(sax, userData); if (ctxt == NULL) { - xmlErrMemory(pctx, NULL); + xmlErrMemory(pctx); return(NULL); } if (pctx != NULL) { + if (pctx->errorHandler != NULL) + xmlCtxtSetErrorHandler(ctxt, pctx->errorHandler, pctx->errorCtxt); + ctxt->options = pctx->options; ctxt->_private = pctx->_private; ctxt->input_id = pctx->input_id; @@ -13453,7 +13440,7 @@ xmlCreateEntityParserCtxtInternal(xmlSAXHandlerPtr sax, void *userData, if (base != NULL) { if (xmlBuildURISafe(URL, base, &uri) < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } if (uri != NULL) @@ -13469,7 +13456,7 @@ xmlCreateEntityParserCtxtInternal(xmlSAXHandlerPtr sax, void *userData, if (ctxt->directory == NULL) { ctxt->directory = xmlParserGetDirectory((char *)URL); if (ctxt->directory == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } } @@ -13480,7 +13467,7 @@ xmlCreateEntityParserCtxtInternal(xmlSAXHandlerPtr sax, void *userData, error: if (pctx != NULL) { if (xmlCopyError(&ctxt->lastError, &pctx->lastError) < 0) { - xmlErrMemory(pctx, NULL); + xmlErrMemory(pctx); } else { pctx->errNo = ctxt->errNo; if (ctxt->disableSAX > pctx->disableSAX) @@ -14574,7 +14561,7 @@ xmlDoRead(xmlParserCtxtPtr ctxt, const char *URL, const char *encoding, (ctxt->input->filename == NULL)) { ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL); if (ctxt->input->filename == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); goto error; } } @@ -14871,7 +14858,7 @@ xmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size, input = xmlParserInputBufferCreateStatic(buffer, size, XML_CHAR_ENCODING_NONE); if (input == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } diff --git a/parserInternals.c b/parserInternals.c index cf7a9e0a..ec30288c 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -62,7 +62,6 @@ * @version: the include version number * * check the compiled lib version against the include one. - * This can warn or immediately kill the application */ void xmlCheckVersion(int version) { @@ -71,15 +70,11 @@ xmlCheckVersion(int version) { xmlInitParser(); if ((myversion / 10000) != (version / 10000)) { - xmlGenericError(xmlGenericErrorContext, - "Fatal: program compiled against libxml %d using libxml %d\n", - (version / 10000), (myversion / 10000)); fprintf(stderr, "Fatal: program compiled against libxml %d using libxml %d\n", (version / 10000), (myversion / 10000)); - } - if ((myversion / 100) < (version / 100)) { - xmlGenericError(xmlGenericErrorContext, + } else if ((myversion / 100) < (version / 100)) { + fprintf(stderr, "Warning: program compiled against libxml %d using older %d\n", (version / 100), (myversion / 100)); } @@ -94,49 +89,56 @@ xmlCheckVersion(int version) { /** - * xmlErrMemory: + * xmlCtxtSetErrorHandler: * @ctxt: an XML parser context - * @extra: extra information + * @handler: error handler + * @data: data for error handler * - * Handle a redefinition of attribute error + * Set an error handler for a parser context. */ void -xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra ATTRIBUTE_UNUSED) +xmlCtxtSetErrorHandler(xmlParserCtxtPtr ctxt, xmlStructuredErrorFunc handler, + void *data) { - xmlError *lastError = &xmlLastError; + if (ctxt == NULL) + return; + ctxt->errorHandler = handler; + ctxt->errorCtxt = data; +} - xmlResetLastError(); - lastError->domain = XML_FROM_PARSER; - lastError->code = XML_ERR_NO_MEMORY; - lastError->level = XML_ERR_FATAL; +/** + * xmlCtxtErrMemory: + * @ctxt: an XML parser context + * @domain: domain + * + * Handle an out-of-memory error + */ +void +xmlCtxtErrMemory(xmlParserCtxtPtr ctxt) +{ + xmlStructuredErrorFunc schannel = NULL; + xmlGenericErrorFunc channel = NULL; + void *data; ctxt->errNo = XML_ERR_NO_MEMORY; ctxt->instate = XML_PARSER_EOF; /* TODO: Remove after refactoring */ ctxt->wellFormed = 0; ctxt->disableSAX = 2; - xmlResetError(&ctxt->lastError); - ctxt->lastError.domain = XML_FROM_PARSER; - ctxt->lastError.code = XML_ERR_NO_MEMORY; - ctxt->lastError.level = XML_ERR_FATAL; - - if ((ctxt->sax->initialized == XML_SAX2_MAGIC) && + if (ctxt->errorHandler) { + schannel = ctxt->errorHandler; + data = ctxt->errorCtxt; + } else if ((ctxt->sax->initialized == XML_SAX2_MAGIC) && (ctxt->sax->serror != NULL)) { - ctxt->sax->serror(ctxt->userData, &ctxt->lastError); - } else if (xmlStructuredError != NULL) { - xmlStructuredError(ctxt->userData, &ctxt->lastError); + schannel = ctxt->sax->serror; + data = ctxt->userData; } else { - xmlGenericErrorFunc channel = ctxt->sax->error; - - if ((channel == xmlParserError) || - (channel == xmlParserWarning) || - (channel == xmlParserValidityError) || - (channel == xmlParserValidityWarning)) - channel = xmlGenericError; - - if (channel != NULL) - channel(ctxt->userData, "parser error : out of memory\n"); + channel = ctxt->sax->error; + data = ctxt->userData; } + + xmlRaiseMemoryError(schannel, channel, data, XML_FROM_PARSER, + &ctxt->lastError); } void @@ -146,7 +148,7 @@ xmlVErrParser(xmlParserCtxtPtr ctxt, xmlNodePtr node, int int1, const char *msg, va_list ap) { xmlStructuredErrorFunc schannel = NULL; - xmlGenericErrorFunc channel; + xmlGenericErrorFunc channel = NULL; void *data; const char *file = NULL; int line = 0; @@ -157,7 +159,7 @@ xmlVErrParser(xmlParserCtxtPtr ctxt, xmlNodePtr node, return; if (code == XML_ERR_NO_MEMORY) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } @@ -171,10 +173,14 @@ xmlVErrParser(xmlParserCtxtPtr ctxt, xmlNodePtr node, ctxt->nbErrors += 1; } - if (ctxt->sax->initialized == XML_SAX2_MAGIC) + if (ctxt->errorHandler) { + schannel = ctxt->errorHandler; + data = ctxt->errorCtxt; + } else if ((ctxt->sax->initialized == XML_SAX2_MAGIC) && + (ctxt->sax->serror != NULL)) { schannel = ctxt->sax->serror; - - if ((domain == XML_FROM_VALID) || (domain == XML_FROM_DTD)) { + data = ctxt->userData; + } else if ((domain == XML_FROM_VALID) || (domain == XML_FROM_DTD)) { if (level == XML_ERR_WARNING) channel = ctxt->vctxt.warning; else @@ -206,7 +212,7 @@ xmlVErrParser(xmlParserCtxtPtr ctxt, xmlNodePtr node, msg, ap); if (res < 0) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return; } @@ -1357,7 +1363,7 @@ xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input, buf = xmlBufCreate(); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } @@ -1375,7 +1381,7 @@ xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input, nbchars = xmlCharEncInput(in); xmlBufResetInput(in->buffer, input); if (nbchars == XML_ENC_ERR_MEMORY) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } else if (nbchars < 0) { xmlErrInternal(ctxt, "switching encoding: encoder error\n", @@ -1573,7 +1579,7 @@ xmlSetDeclaredEncoding(xmlParserCtxtPtr ctxt, xmlChar *encoding) { xmlFree(encoding); encoding = xmlStrdup(BAD_CAST autoEnc); if (encoding == NULL) - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); } } } @@ -1623,7 +1629,7 @@ xmlNewInputStream(xmlParserCtxtPtr ctxt) { input = (xmlParserInputPtr) xmlMalloc(sizeof(xmlParserInput)); if (input == NULL) { - xmlErrMemory(ctxt, "couldn't allocate a new input stream\n"); + xmlErrMemory(ctxt); return(NULL); } memset(input, 0, sizeof(xmlParserInput)); @@ -1637,7 +1643,7 @@ xmlNewInputStream(xmlParserCtxtPtr ctxt) { */ if (ctxt != NULL) { if (input->id >= INT_MAX) { - xmlErrMemory(ctxt, "Input ID overflow\n"); + xmlErrMemory(ctxt); return(NULL); } input->id = ctxt->input_id++; @@ -1663,8 +1669,6 @@ xmlNewIOInputStream(xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input, xmlParserInputPtr inputStream; if (input == NULL) return(NULL); - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, "new input from I/O\n"); inputStream = xmlNewInputStream(ctxt); if (inputStream == NULL) { return(NULL); @@ -1700,9 +1704,6 @@ xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { NULL); return(NULL); } - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "new input from entity: %s\n", entity->name); if (entity->content == NULL) { switch (entity->etype) { case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY: @@ -1768,17 +1769,14 @@ xmlNewStringInputStream(xmlParserCtxtPtr ctxt, const xmlChar *buffer) { NULL); return(NULL); } - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "new fixed input: %.30s\n", buffer); buf = xmlParserInputBufferCreateString(buffer); if (buf == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(NULL); } input = xmlNewInputStream(ctxt); if (input == NULL) { - xmlErrMemory(ctxt, "couldn't allocate a new input stream\n"); + xmlErrMemory(ctxt); xmlFreeParserInputBuffer(buf); return(NULL); } @@ -1803,9 +1801,6 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) { char *directory = NULL; xmlChar *URI = NULL; - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "new input from file: %s\n", filename); if (ctxt == NULL) return(NULL); buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE); if (buf == NULL) { @@ -2007,7 +2002,7 @@ xmlInitSAXParserCtxt(xmlParserCtxtPtr ctxt, const xmlSAXHandler *sax, if (ctxt->nsdb == NULL) { ctxt->nsdb = xmlParserNsCreate(); if (ctxt->nsdb == NULL) { - xmlErrMemory(ctxt, NULL); + xmlErrMemory(ctxt); return(-1); } } @@ -2341,7 +2336,7 @@ xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt, byte_size); if (tmp_buffer == NULL) { - xmlErrMemory(ctxt, "failed to allocate buffer\n"); + xmlErrMemory(ctxt); return; } ctxt->node_seq.buffer = tmp_buffer; diff --git a/valid.c b/valid.c index f6f0bdab..c5da9891 100644 --- a/valid.c +++ b/valid.c @@ -30,11 +30,6 @@ static xmlElementPtr xmlGetDtdElementDesc2(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name); -#define TODO \ - xmlGenericError(xmlGenericErrorContext, \ - "Unimplemented block at %s:%d\n", \ - __FILE__, __LINE__); - #ifdef LIBXML_VALID_ENABLED static int xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type, @@ -54,21 +49,17 @@ xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type, * Handle an out of memory error */ static void -xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra) +xmlVErrMemory(xmlValidCtxtPtr ctxt) { if (ctxt != NULL) { if (ctxt->flags & XML_VCTXT_USE_PCTXT) { - xmlParserCtxtPtr pctxt = ctxt->userData; - - xmlErrMemory(pctxt, extra); + xmlCtxtErrMemory(ctxt->userData); } else { - xmlError *lastError = &xmlLastError; - - xmlResetLastError(); - lastError->domain = XML_FROM_PARSER; - lastError->code = XML_ERR_NO_MEMORY; - lastError->level = XML_ERR_FATAL; + xmlRaiseMemoryError(NULL, ctxt->error, ctxt->userData, + XML_FROM_VALID, NULL); } + } else { + xmlRaiseMemoryError(NULL, NULL, NULL, XML_FROM_VALID, NULL); } } @@ -91,18 +82,19 @@ xmlDoErrValid(xmlValidCtxtPtr ctxt, xmlNodePtr node, } else { xmlGenericErrorFunc channel = NULL; void *data = NULL; + int res; if (ctxt != NULL) { channel = ctxt->error; data = ctxt->userData; } - xmlVRaiseError(NULL, channel, data, NULL, node, - XML_FROM_VALID, code, level, - NULL, 0, - (const char *) str1, (const char *) str2, - (const char *) str2, - int1, 0, - msg, ap); + res = xmlVRaiseError(NULL, channel, data, NULL, node, + XML_FROM_VALID, code, level, NULL, 0, + (const char *) str1, (const char *) str2, + (const char *) str2, int1, 0, + msg, ap); + if (res < 0) + xmlVErrMemory(ctxt); } va_end(ap); } @@ -215,7 +207,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) { ctxt->vstateTab = (xmlValidState *) xmlMalloc(ctxt->vstateMax * sizeof(ctxt->vstateTab[0])); if (ctxt->vstateTab == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); return(-1); } } @@ -226,7 +218,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) { tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab, 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0])); if (tmp == NULL) { - xmlVErrMemory(ctxt, "realloc failed"); + xmlVErrMemory(ctxt); return(-1); } ctxt->vstateMax *= 2; @@ -242,7 +234,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) { ctxt->vstateTab[ctxt->vstateNr].exec = xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL); if (ctxt->vstateTab[ctxt->vstateNr].exec == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(-1); } } else { @@ -326,7 +318,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementContentPtr cont, ctxt->vstateTab = (xmlValidState *) xmlMalloc( ctxt->vstateMax * sizeof(ctxt->vstateTab[0])); if (ctxt->vstateTab == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); return(-1); } } @@ -336,7 +328,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementContentPtr cont, tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab, 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0])); if (tmp == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); return(-1); } ctxt->vstateMax *= 2; @@ -384,7 +376,7 @@ nodeVPush(xmlValidCtxtPtr ctxt, xmlNodePtr value) (xmlNodePtr *) xmlMalloc(ctxt->nodeMax * sizeof(ctxt->nodeTab[0])); if (ctxt->nodeTab == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); ctxt->nodeMax = 0; return (0); } @@ -394,7 +386,7 @@ nodeVPush(xmlValidCtxtPtr ctxt, xmlNodePtr value) tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab, ctxt->nodeMax * 2 * sizeof(ctxt->nodeTab[0])); if (tmp == NULL) { - xmlVErrMemory(ctxt, "realloc failed"); + xmlVErrMemory(ctxt); return (0); } ctxt->nodeMax *= 2; @@ -471,7 +463,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content, fullname = xmlBuildQName(content->name, content->prefix, fn, 50); if (fullname == NULL) { - xmlVErrMemory(ctxt, "Building content model"); + xmlVErrMemory(ctxt); return(0); } @@ -622,7 +614,7 @@ xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem) { ctxt->am = xmlNewAutomata(); if (ctxt->am == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(0); } ctxt->state = xmlAutomataGetInitState(ctxt->am); @@ -630,7 +622,7 @@ xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem) { xmlAutomataSetFinalState(ctxt->am, ctxt->state); elem->contModel = xmlAutomataCompile(ctxt->am); if (elem->contModel == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); goto done; } if (xmlRegexpIsDeterminist(elem->contModel) != 1) { @@ -1428,7 +1420,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt, return(ret); mem_error: - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); if (prefix != NULL) xmlFree(prefix); return(NULL); @@ -1933,7 +1925,7 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, else ret->defaultValue = xmlStrdup(defaultValue); if (ret->defaultValue == NULL) - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); } /* @@ -2019,7 +2011,7 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, return(ret); mem_error: - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); xmlFreeEnumeration(tree); xmlFreeAttribute(ret); return(NULL); @@ -2329,7 +2321,7 @@ xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, return(ret); mem_error: - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); xmlFreeNotation(ret); return(NULL); } @@ -2621,7 +2613,7 @@ xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, res = xmlAddIDSafe(doc, value, attr, xmlIsStreaming(ctxt), &id); if (res < 0) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); } #ifdef LIBXML_VALID_ENABLED else if (res == 0) { @@ -2961,7 +2953,7 @@ xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, return(ret); failed: - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); if (ret != NULL) { if (ret->value != NULL) xmlFree((char *)ret->value); @@ -3224,7 +3216,7 @@ xmlGetDtdElementDesc2(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name) return(cur); mem_error: - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); xmlFree(prefix); xmlFreeElement(cur); return(NULL); @@ -3464,7 +3456,7 @@ xmlCtxtGetDtdElementDesc(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, localName = xmlSplitQName4(name, &prefix); if (localName == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(NULL); } cur = xmlHashLookup2(table, localName, prefix); @@ -3944,7 +3936,7 @@ xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc, dup = xmlStrdup(value); if (dup == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(0); } cur = dup; @@ -4086,7 +4078,7 @@ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc, return(ret); mem_error: - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); done: xmlFree(prefix); @@ -4429,7 +4421,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50); if (fullname == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(0); } attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, fullname, @@ -4593,7 +4585,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) { fullname = xmlBuildQName(elem->name, prefix, fn, 50); if (fullname == NULL) { - xmlVErrMemory(ctxt, "Validating namespace"); + xmlVErrMemory(ctxt); return(0); } if (ns->prefix != NULL) { @@ -5274,7 +5266,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child, ctxt->nodeTab = NULL; exec = xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL); if (exec == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(-1); } cur = child; @@ -5309,7 +5301,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child, fullname = xmlBuildQName(cur->name, cur->ns->prefix, fn, 50); if (fullname == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); ret = -1; goto fail; } @@ -5324,7 +5316,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child, break; } if (ret == XML_REGEXP_OUT_OF_MEMORY) - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); /* * Switch to next element */ @@ -5348,7 +5340,7 @@ fail: ctxt->vstateTab = (xmlValidState *) xmlMalloc( ctxt->vstateMax * sizeof(ctxt->vstateTab[0])); if (ctxt->vstateTab == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); return(-1); } /* @@ -5407,7 +5399,7 @@ fail: */ tmp = (xmlNodePtr) xmlMalloc(sizeof(xmlNode)); if (tmp == NULL) { - xmlVErrMemory(ctxt, "malloc failed"); + xmlVErrMemory(ctxt); xmlFreeNodeList(repl); ret = -1; goto done; @@ -5800,7 +5792,7 @@ xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, if (state->exec != NULL) { ret = xmlRegExecPushString(state->exec, qname, NULL); if (ret == XML_REGEXP_OUT_OF_MEMORY) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(0); } if (ret < 0) { @@ -6361,7 +6353,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50); if (fullname == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return(0); } ret = xmlStrEqual(doc->intSubset->name, fullname); @@ -6416,7 +6408,7 @@ xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr root) { while (attr != NULL) { value = xmlNodeListGetString(doc, attr->children, 0); if (value == NULL) - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value); if (value != NULL) xmlFree((char *)value); @@ -6478,7 +6470,7 @@ xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt, dup = xmlStrdup(name); if (dup == NULL) { - xmlVErrMemory(ctxt, NULL); + xmlVErrMemory(ctxt); return; } cur = dup; @@ -6513,7 +6505,7 @@ xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt, dup = xmlStrdup(name); if (dup == NULL) { - xmlVErrMemory(ctxt, "IDREFS split"); + xmlVErrMemory(ctxt); ctxt->valid = 0; return; } diff --git a/xmlIO.c b/xmlIO.c index c3a4409a..8cf20e82 100644 --- a/xmlIO.c +++ b/xmlIO.c @@ -202,7 +202,6 @@ __xmlIOWin32UTF8ToWChar(const char *u8String) } #endif -#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) /** * xmlIOErrMemory: * @extra: extra information @@ -210,11 +209,10 @@ __xmlIOWin32UTF8ToWChar(const char *u8String) * Handle an out of memory condition */ static void -xmlIOErrMemory(const char *extra) +xmlIOErrMemory(void) { - __xmlSimpleError(XML_FROM_IO, XML_ERR_NO_MEMORY, NULL, NULL, extra); + xmlRaiseMemoryError(NULL, NULL, NULL, XML_FROM_IO, NULL); } -#endif /** * __xmlIOErr: @@ -228,6 +226,7 @@ void __xmlIOErr(int domain, int code, const char *extra) { unsigned int idx; + int res; if (code == 0) { if (errno == 0) code = 0; @@ -390,7 +389,12 @@ __xmlIOErr(int domain, int code, const char *extra) if (code >= XML_IO_UNKNOWN) idx = code - XML_IO_UNKNOWN; if (idx >= (sizeof(IOerr) / sizeof(IOerr[0]))) idx = 0; - __xmlSimpleError(domain, code, NULL, IOerr[idx], extra); + res = __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, + domain, code, XML_ERR_ERROR, NULL, 0, + extra, NULL, NULL, 0, 0, + IOerr[idx], extra); + if (res < 0) + xmlIOErrMemory(); } /** @@ -1460,7 +1464,7 @@ xmlCreateZMemBuff( int compression ) { buff = xmlMalloc( sizeof( xmlZMemBuff ) ); if ( buff == NULL ) { - xmlIOErrMemory("creating buffer context"); + xmlIOErrMemory(); return ( NULL ); } @@ -1469,7 +1473,7 @@ xmlCreateZMemBuff( int compression ) { buff->zbuff = xmlMalloc( buff->size ); if ( buff->zbuff == NULL ) { xmlFreeZMemBuff( buff ); - xmlIOErrMemory("creating buffer"); + xmlIOErrMemory(); return ( NULL ); } @@ -1753,7 +1757,7 @@ xmlIOHTTPOpenW(const char *post_uri, int compression ATTRIBUTE_UNUSED) ctxt = xmlMalloc(sizeof(xmlIOHTTPWriteCtxt)); if (ctxt == NULL) { - xmlIOErrMemory("creating HTTP output context"); + xmlIOErrMemory(); return (NULL); } @@ -1761,7 +1765,7 @@ xmlIOHTTPOpenW(const char *post_uri, int compression ATTRIBUTE_UNUSED) ctxt->uri = (char *) xmlStrdup((const xmlChar *)post_uri); if (ctxt->uri == NULL) { - xmlIOErrMemory("copying URI"); + xmlIOErrMemory(); xmlFreeHTTPWriteCtxt(ctxt); return (NULL); } @@ -4009,7 +4013,7 @@ xmlLoadExternalEntity(const char *URL, const char *ID, canonicFilename = (char *) xmlCanonicPath((const xmlChar *) URL); if (canonicFilename == NULL) { - xmlErrMemory(ctxt, "building canonical path\n"); + xmlCtxtErrMemory(ctxt); return(NULL); } diff --git a/xmlreader.c b/xmlreader.c index 8006e4c2..48fae4bc 100644 --- a/xmlreader.c +++ b/xmlreader.c @@ -206,7 +206,7 @@ static void xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur); static void xmlTextReaderErrMemory(xmlTextReaderPtr reader) { - xmlErrMemory(reader->ctxt, NULL); + xmlCtxtErrMemory(reader->ctxt); reader->mode = XML_TEXTREADER_MODE_ERROR; reader->state = XML_TEXTREADER_ERROR; } diff --git a/xmlwriter.c b/xmlwriter.c index 4db78132..a75d5482 100644 --- a/xmlwriter.c +++ b/xmlwriter.c @@ -4509,7 +4509,7 @@ xmlTextWriterStartDocumentCallback(void *ctx) if (ctxt->myDoc == NULL) ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL); if (ctxt->myDoc == NULL) { - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); return; } } else @@ -4527,7 +4527,7 @@ xmlTextWriterStartDocumentCallback(void *ctx) doc->standalone = ctxt->standalone; } } else { - xmlErrMemory(ctxt, NULL); + xmlCtxtErrMemory(ctxt); return; } }