aboutsummaryrefslogtreecommitdiffstats
path: root/parser.c
Commit message (Collapse)AuthorAgeFilesLines
* Cleanup conditional section error handlingDaniel Veillard2015-02-231-0/+6
| | | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=744980 The error handling of Conditional Section also need to be straightened as the structure of the document can't be guessed on a failure there and it's better to stop parsing as further errors are likely to be irrelevant.
* Stop parsing on entities boundaries errorsDaniel Veillard2015-02-231-0/+1
| | | | | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=744980 There are times, like on unterminated entities that it's preferable to stop parsing, even if that means less error reporting. Entities are feeding the parser on further processing, and if they are ill defined then it's possible to get the parser to bug. Also do the same on Conditional Sections if the input is broken, as the structure of the document can't be guessed.
* Fix missing entities after CVE-2014-3660 fixDaniel Veillard2014-10-231-1/+2
| | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=738805 The fix for CVE-2014-3660 introduced a regression in some case where entity substitution is required and the entity is used first in anotther entity referenced from an attribute value
* Revert "Missing initialization for the catalog module"Daniel Veillard2014-10-171-3/+0
| | | | | | This reverts commit 054c716ea1bf001544127a4ab4f4346d1b9947e7. As this break xmlcatalog command https://bugzilla.redhat.com/show_bug.cgi?id=1153753
* Fix for CVE-2014-3660Daniel Veillard2014-10-161-4/+38
| | | | | Issues related to the billion laugh entity expansion which happened to escape the initial set of fixes
* fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENCBart De Schuymer2014-10-161-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 error on repeated recursive entity expansion containing &lt;Daniel Veillard2014-10-081-2/+2
| | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=736417 basically a weird side effect and a failure to properly parenthesize a boolean expression led to this bug
* parser bug on misformed namespace attributesDennis Filder2014-10-061-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=672539 Reported by Axel Miller <axel.miller@ppi.de> Consider the following start-tag: <x xmlns=""version=""> The start-tag does not conform to the rule [40] STag ::= '<' Name (S Attribute)* S? '>' since there is no whitespace in front of the attribute "version". Thus, libxml2 should reject the start-tag. But it doesn't: $ echo '<x xmlns=""version=""/>' | xmllint - <?xml version="1.0"?> <x xmlns="" version=""/> The error seems to happen only if there is a namespace declaration in front of the attribute. A missing whitespace between other attributes is handled correctly: $ echo '<x someattr=""version=""/>' | xmllint - -:1: parser error : attributes construct error <x someattr=""version=""/> ^ [...]
* wrong error column in structured error when parsing end tagJuergen Keil2014-10-061-0/+2
| | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=734283 libxml2 reports wrong error column numbers (field int2 in xmlError) in structured error handler, after parsing an end tag.
* wrong error column in structured error when parsing attribute valuesJuergen Keil2014-08-071-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=734280 libxml2 reports wrong error column numbers (field int2 in xmlError) in structured error handler, after parsing XML attribute values. Example XML: <?xml version="1.0" encoding="UTF-8"?> <root xmlns="urn:colbug">&</root> <!-- 1 2 3 4 1234567890123456789012345678901234567890 --> Expected location of the error would be line 3, column 21. The actual location of the error is line 3, column 9: $ ./xmlparse colbug2.xml colbug2.xml:3:9: xmlParseEntityRef: no name The 12 characters of the xmlns attribute value "urn:colbug" are not accounted for in the error column value.
* wrong error column in structured error when skipping whitespace in xml declJuergen Keil2014-08-071-0/+2
| | | | | | | | | | | | | | | | | | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=734276 libxml2 reports wrong error column numbers (field int2 in xmlError) in structured error handler, after an XML declaration containing whitespace. Example XML: <?xml version="1.0" encoding="UTF-8" ?><root>&</root> <!-- 1 2 3 4 5 6 123456789012345678901234567890123456789012345678901234567890 --> Expected location of the error would be line 1, column 53. The actual location of the error is line 1, column 44: $ ./xmlparse colbug1.xml colbug1.xml:1:44: xmlParseEntityRef: no name
* typo in error messages "colon are forbidden from..."Daniel Veillard2014-07-261-3/+3
| | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=731511 Pointed byt vincent Lefevre
* Fix a potential NULL dereferenceDaniel Veillard2014-07-141-0/+6
| | | | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=733040 xmlDictLookup() may return NULL in case of allocation error, though very unlikely it need to be checked.
* Fix regressions introduced by CVE-2014-0191 patchDaniel Veillard2014-06-111-2/+11
| | | | | | | | A number of issues have been raised after the fix, and this patch tries to correct all of them, though most were related to postvalidation. https://bugzilla.gnome.org/show_bug.cgi?id=730290 and other reports on list, off-list and on Red Hat bugzilla
* Do not fetch external parameter entitiesDaniel Veillard2014-05-061-0/+14
| | | | | Unless explicitely asked for when validating or replacing entities with their value. Problem pointed out by Daniel Berrange <berrange@redhat.com>
* Fix xmlParseInNodeContext() if node is not elementDaniel Veillard2014-03-211-1/+2
| | | | | | We really need to have ctxt->instate == XML_PARSER_CONTENT when jumping in content parsing Bug reported by Frank Gross
* Fix a portability issue on WindowsLongstreth Jon2014-02-061-2/+5
| | | | Apparently an verflow when comparing macro and unsigned long
* Missing initialization for the catalog moduleDaniel Veillard2014-01-261-0/+3
|
* adding init calls to xml and html Read parsing entry pointsDaniel Veillard2013-12-091-0/+10
| | | | | | As pointed out by "Tassyns, Bram <BramT@enfocus.com>" on the list some call had it other didn't, clean it up and add to all missing ones
* Fix incorrect spelling entites->entitiesJan Pokorný2013-11-301-1/+1
| | | | | | Partially, a follow-up of 81d7a8245cf9a31a49499a5a195c2b89e6f91180. Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
* Fix a parsing bug on non-ascii element and CR/LF usageDaniel Veillard2013-05-221-1/+5
| | | | | | | | https://bugzilla.gnome.org/show_bug.cgi?id=698550 Somehow the behaviour of the internal parser routine changed slightly when encountering CR/LF, which led to a bug when parsing document with non-ascii Names
* Fix a regression in xmlGetDocCompressMode()Daniel Veillard2013-05-101-0/+4
| | | | | | | | | | | | The switch to xzlib had for consequence that the compression level of the input was not gathered anymore in ctxt->input->buf, then the parser compression flags was left to -1 and propagated to the resulting document. Fix the I/O layer to get compression detection in xzlib, then carry it in the input buffer and the resulting document This should fix https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3456
* Cast encoding name to char pointer to match arg typeNikolay Sivov2013-05-061-1/+1
|
* Fix an error in xmlCleanupParserAlexander Pastukhov2013-04-231-1/+1
| | | | | | | | https://bugzilla.gnome.org/show_bug.cgi?id=698582 xmlCleanupParser calls xmlCleanupGlobals() and then xmlResetLastError() but the later reallocate the global data freed by previous call. Just swap the two calls.
* Fix a couple of return without valueJüri Aedla2013-04-161-2/+2
| | | | Error introduced in previous commit !
* Improve handling of xmlStopParser()Daniel Veillard2013-04-111-6/+65
| | | | | Add a specific parser error Try to stop parsing as quickly as possible
* Cache presence of '<' in entities contentDaniel Veillard2013-03-111-12/+18
| | | | | slightly modify how ent->checked is used, and use the lowest bit to keep the information
* Avoid extra processing on entitiesDaniel Veillard2013-03-111-2/+6
| | | | | If an entity has already been checked for correctness no need to check it on every reference
* Detect excessive entities expansion upon replacementDaniel Veillard2013-02-191-6/+38
| | | | | | | | | If entities expansion in the XML parser is asked for, it is possble to craft relatively small input document leading to excessive on-the-fly content generation. This patch accounts for those replacement and stop parsing after a given threshold. it can be bypassed as usual with the HUGE parser option.
* Fix the flushing out of raw buffers on encoding conversionsDaniel Veillard2013-02-131-3/+7
| | | | | | | | | | | | https://bugzilla.gnome.org/show_bug.cgi?id=692915 the new set of converting functions tried to limit the encoding conversion of the raw buffer to the consumption one to work in a more progressive fashion. Unfortunately this was bad for performances and led to errors on progressive parsing when a very large chunk was close to the end of the document. Fix the new internal function and switch back to the old way of converting. Fix another bug in the process.
* Fix some buffer conversion issuesDaniel Veillard2013-02-121-1/+11
| | | | | | | | https://bugzilla.gnome.org/show_bug.cgi?id=690202 Buffer overflow errors originating from xmlBufGetInputBase in 2.9.0 The pointers from the context input were not properly reset after that call which can do reallocations.
* Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1ePatrick Gansterer2013-01-041-1/+1
| | | | Add missing cast for xmlNop to silence a compiler warning.
* Fix an error in the progressive DTD parsing codeDan Winship2012-12-211-1/+1
| | | | | For https://bugzilla.gnome.org/show_bug.cgi?id=689958 We were looking for the wrong character in the input stream
* Fix spelling of "length".Michael Wood2012-10-301-10/+10
|
* Fix potential out of bound accessDaniel Veillard2012-10-291-1/+1
|
* Fix large parse of file from memoryDaniel Veillard2012-10-261-0/+1
| | | | | | | https://bugzilla.redhat.com/show_bug.cgi?id=862969 The new code trying to detect excessive input lookup would just get wrong sometimes in the case of very large file parsed directly from memory.
* Fix a bug in the nsclean option of the parserDaniel Veillard2012-10-251-1/+1
| | | | | Raised as a side effect of: https://bugzilla.gnome.org/show_bug.cgi?id=663844
* Fix a regression in 2.9.0 breaking validation while streamingDaniel Veillard2012-10-251-2/+5
| | | | | https://bugzilla.gnome.org/show_bug.cgi?id=684774 with help from Kjell Ahlstedt <kjell.ahlstedt@bredband.net>
* Fix typos in parser commentsJan Pokorný2012-09-131-2/+2
| | | | Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
* Big space and tab cleanupDaniel Veillard2012-09-111-178/+178
| | | | Remove all space before tabs and space and tabs at end of lines.
* Fix potential crash on entities errorsDaniel Veillard2012-09-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Related to https://bugs.launchpad.net/lxml/+bug/502959 Basically the core of the issue is that if an entity references another entity, then in case we are replacing entities content, we should always do so by copying the referenced content as long as the reference is done within the entity. Otherwise, if for some reason there is a later parsing error that entity content may be freed. Complex scenario exposed by command: thinkpad:~/XML/diveintopython-5.4/xml -> valgrind --db-attach=yes ../../xmllint --loaddtd --noout --noent diveintopython.xml Document references &a; a references &b; we references b content directly in by linking in the a content a has an error further down we free a, freeing the chunk from b Document references &b; after &a; we try to copy b content, but it was freed already => segfault * parser.c: never reference directly entity content without copying if we aren't in the document main entity
* Cleanup some of the parser codeDaniel Veillard2012-08-151-6/+47
| | | | | | Prefetching assumptions about the amount of data read in GROW should be backed up with test for 0 termination when at the end of the buffer.
* Add support for big line numbers in error reportingDaniel Veillard2012-08-131-0/+4
| | | | | | | | | | | | | | Fix the lack of line number as reported by Johan Corveleyn <jcorvel@gmail.com> * parser.c include/libxml/parser.h: add an XML_PARSE_BIG_LINES parser option not switch on by default, it's an opt-in * SAX2.c: if XML_PARSE_BIG_LINES is set store the long line numbers in the psvi field of text nodes * tree.c: expand xmlGetLineNo to extract those informations, also make sure we can't fail on recursive behaviour * error.c: in __xmlRaiseError, if a node is provided, call xmlGetLineNo() if we can't get a valid line number. * xmllint.c: switch on XML_PARSE_BIG_LINES in xmllint
* More fixups on the push parser behaviourDaniel Veillard2012-08-031-2/+17
|
* Strengthen behaviour of the push parser in problematic situationsDaniel Veillard2012-07-311-0/+17
| | | | | Implement the maximum lookahead stategy, and fix some handling of DTD to speed up processing.
* Improve error reporting on parser errorsDaniel Veillard2012-07-301-58/+63
| | | | | | The extra string was being dismissed when provided. * parser.c: handle bot case properly * result/: this changes a few error reports
* Enforce XML_PARSER_EOF state handling through the parserDaniel Veillard2012-07-301-21/+110
| | | | | | That condition is one raised when the parser should positively stop processing further even to report errors. Best is to test is after most GROW call especially within loops
* Fixup limits parserDaniel Veillard2012-07-301-0/+1
|
* Introduce some default parser limitsDaniel Veillard2012-07-301-3/+81
| | | | | | | | | Those can be overrided by the XML_PARSE_HUGE option, they are just default limits for Name lenght, dictionary size limits and maximum amount of parser lookup. * include/libxml/parserInternals.h: define the limits * include/libxml/xmlerror.h: add a new error * parser.c parserInternals.c: implements the new limits
* More avoid quadratic behaviourDaniel Veillard2012-07-231-4/+24
|