[libxml2] Fix regression with PEs in external DTD



commit d85245f9349db5766c9fedfa8c933de236330a7b
Author: Nick Wellnhofer <wellnhofer aevum de>
Date:   Sun Jan 16 21:39:04 2022 +0100

    Fix regression with PEs in external DTD
    
    Fix a regression introduced with commit a28f7d87. In some cases,
    parameter entity references in external DTDs wouldn't be expanded.
    
    Fixes #306.

 parser.c                         | 3 ++-
 result/valid/pe-test.xml         | 3 +++
 result/valid/pe-test.xml.err     | 0
 result/valid/pe-test.xml.err.rdr | 0
 test/valid/dtds/pe-test.dtd      | 3 +++
 test/valid/pe-test.xml           | 2 ++
 6 files changed, 10 insertions(+), 1 deletion(-)
---
diff --git a/parser.c b/parser.c
index 2f7ac112..7796cb51 100644
--- a/parser.c
+++ b/parser.c
@@ -2194,7 +2194,8 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
      * It's Okay to use CUR/NEXT here since all the blanks are on
      * the ASCII range.
      */
-    if (ctxt->instate != XML_PARSER_DTD) {
+    if (((ctxt->inputNr == 1) && (ctxt->instate != XML_PARSER_DTD)) ||
+        (ctxt->instate == XML_PARSER_START)) {
        const xmlChar *cur;
        /*
         * if we are in the document content, go really fast
diff --git a/result/valid/pe-test.xml b/result/valid/pe-test.xml
new file mode 100644
index 00000000..b7ccbcf2
--- /dev/null
+++ b/result/valid/pe-test.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc SYSTEM "dtds/pe-test.dtd">
+<doc>&ent;</doc>
diff --git a/result/valid/pe-test.xml.err b/result/valid/pe-test.xml.err
new file mode 100644
index 00000000..e69de29b
diff --git a/result/valid/pe-test.xml.err.rdr b/result/valid/pe-test.xml.err.rdr
new file mode 100644
index 00000000..e69de29b
diff --git a/test/valid/dtds/pe-test.dtd b/test/valid/dtds/pe-test.dtd
new file mode 100644
index 00000000..3715755e
--- /dev/null
+++ b/test/valid/dtds/pe-test.dtd
@@ -0,0 +1,3 @@
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY % decl 'ent "value"'>
+<!ENTITY %decl;>
diff --git a/test/valid/pe-test.xml b/test/valid/pe-test.xml
new file mode 100644
index 00000000..14946667
--- /dev/null
+++ b/test/valid/pe-test.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "dtds/pe-test.dtd">
+<doc>&ent;</doc>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]