From 023d0babc41da367f9272d4acc825bdd862f7a9c Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 29 Jul 2009 11:34:50 +0200 Subject: [PATCH] Fix leak on SAX1, xmllint --sax1 option and debug * SAX2.c: don't leak in xmlCheckDefaultedAttributes for standalone checking * xmllint.c: fix xmllint --sax1 to actually use XML_PARSE_SAX1 * debugXML.c: don't raise an error if markup wasn't allocated from dictionary if document was parsed with option disabling it --- SAX2.c | 1 + debugXML.c | 4 +++- xmllint.c | 7 ++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/SAX2.c b/SAX2.c index 8dc1d582..e5d6eb50 100644 --- a/SAX2.c +++ b/SAX2.c @@ -1446,6 +1446,7 @@ process_external_subset: (const char *)fulln, (const char *)attr->elem); } + xmlFree(fulln); } attr = attr->nexth; } diff --git a/debugXML.c b/debugXML.c index b56651b0..76134cca 100644 --- a/debugXML.c +++ b/debugXML.c @@ -259,7 +259,9 @@ xmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name) "Name is not an NCName '%s'", (const char *) name); } if ((ctxt->dict != NULL) && - (!xmlDictOwns(ctxt->dict, name))) { + (!xmlDictOwns(ctxt->dict, name)) && + ((ctxt->doc == NULL) || + ((ctxt->doc->parseFlags & (XML_PARSE_SAX1 | XML_PARSE_NODICT)) == 0))) { xmlDebugErr3(ctxt, XML_CHECK_OUTSIDE_DICT, "Name is not from the document dictionnary '%s'", (const char *) name); diff --git a/xmllint.c b/xmllint.c index a668570e..c324ef30 100644 --- a/xmllint.c +++ b/xmllint.c @@ -3221,16 +3221,17 @@ main(int argc, char **argv) { #ifdef LIBXML_SAX1_ENABLED else if ((!strcmp(argv[i], "-sax1")) || (!strcmp(argv[i], "--sax1"))) { - sax1++; + sax1++; + options |= XML_PARSE_SAX1; } #endif /* LIBXML_SAX1_ENABLED */ else if ((!strcmp(argv[i], "-sax")) || (!strcmp(argv[i], "--sax"))) { - sax++; + sax++; } else if ((!strcmp(argv[i], "-chkregister")) || (!strcmp(argv[i], "--chkregister"))) { - chkregister++; + chkregister++; #ifdef LIBXML_SCHEMAS_ENABLED } else if ((!strcmp(argv[i], "-relaxng")) || (!strcmp(argv[i], "--relaxng"))) {