diff options
Diffstat (limited to 'debian/patches/0053-fix-memory-leak-xml-header-encoding-field-with-XML_P.patch')
-rw-r--r-- | debian/patches/0053-fix-memory-leak-xml-header-encoding-field-with-XML_P.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/debian/patches/0053-fix-memory-leak-xml-header-encoding-field-with-XML_P.patch b/debian/patches/0053-fix-memory-leak-xml-header-encoding-field-with-XML_P.patch new file mode 100644 index 0000000..4fc48a0 --- /dev/null +++ b/debian/patches/0053-fix-memory-leak-xml-header-encoding-field-with-XML_P.patch @@ -0,0 +1,50 @@ +From: Bart De Schuymer <deschuyb@b-virtual.org> +Date: Thu, 16 Oct 2014 12:17:20 +0800 +Subject: fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC + +When the xml parser encounters an xml encoding in an xml header while +configured with option XML_PARSE_IGNORE_ENC, it fails to free memory +allocated for storing the encoding. +The patch below fixes this. +How to reproduce: +1. Change doc/examples/parse4.c to add xmlCtxtUseOptions(ctxt, +XML_PARSE_IGNORE_ENC); after the call to xmlCreatePushParserCtxt. +2. Rebuild +3. run the following command from the top libxml2 directory: +LD_LIBRARY_PATH=.libs/ valgrind --leak-check=full +./doc/examples/.libs/parse4 ./test.xml , where test.xml contains +following +input: +<?xml version="1.0" encoding="UTF-81" ?><hi/> +valgrind will report: +==1964== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1 +==1964== at 0x4C272DB: malloc (in +/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) +==1964== by 0x4E88497: xmlParseEncName (parser.c:10224) +==1964== by 0x4E888FE: xmlParseEncodingDecl (parser.c:10295) +==1964== by 0x4E89630: xmlParseXMLDecl (parser.c:10534) +==1964== by 0x4E8B737: xmlParseTryOrFinish (parser.c:11293) +==1964== by 0x4E8E775: xmlParseChunk (parser.c:12283) + +Signed-off-by: Bart De Schuymer <bart at amplidata com> +--- + parser.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/parser.c b/parser.c +index b02333b..ab69d56 100644 +--- a/parser.c ++++ b/parser.c +@@ -10338,8 +10338,10 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) { + /* + * Non standard parsing, allowing the user to ignore encoding + */ +- if (ctxt->options & XML_PARSE_IGNORE_ENC) +- return(encoding); ++ if (ctxt->options & XML_PARSE_IGNORE_ENC) { ++ xmlFree((xmlChar *) encoding); ++ return(NULL); ++ } + + /* + * UTF-16 encoding stwich has already taken place at this stage, |