[libxml2] Fix regression with librsvg
- From: Nick Wellnhofer <nwellnhof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] Fix regression with librsvg
- Date: Tue, 19 Sep 2017 14:48:11 +0000 (UTC)
commit b90d8989d3dc486519686f01490379c963bd1145
Author: Nick Wellnhofer <wellnhofer aevum de>
Date: Tue Sep 19 15:45:35 2017 +0200
Fix regression with librsvg
Instead of using xmlCreateIOParserCtxt, librsvg pushes its own
xmlParserInput on top of a memory push parser. This incorrect use of
the API confuses several parser checks and, since 2.9.5, completely
breaks documents with internal subsets. Work around the problem with
internal subsets.
Thanks to Petr Sumbera for the report:
https://mail.gnome.org/archives/xml/2017-September/msg00011.html
Also see
https://bugzilla.gnome.org/show_bug.cgi?id=787895
parser.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/parser.c b/parser.c
index 770f846..28d0cd2 100644
--- a/parser.c
+++ b/parser.c
@@ -8271,6 +8271,7 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
* Is there any DTD definition ?
*/
if (RAW == '[') {
+ int baseInputNr = ctxt->inputNr;
ctxt->instate = XML_PARSER_DTD;
NEXT;
/*
@@ -8278,7 +8279,7 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
* PEReferences.
* Subsequence (markupdecl | PEReference | S)*
*/
- while (((RAW != ']') || (ctxt->inputNr > 1)) &&
+ while (((RAW != ']') || (ctxt->inputNr > baseInputNr)) &&
(ctxt->instate != XML_PARSER_EOF)) {
const xmlChar *check = CUR_PTR;
unsigned int cons = ctxt->input->consumed;
@@ -8290,7 +8291,7 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
"xmlParseInternalSubset: error detected in Markup declaration\n");
- if (ctxt->inputNr > 1)
+ if (ctxt->inputNr > baseInputNr)
xmlPopInput(ctxt);
else
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]