[libxml2] Get rid of "blanks wrapper" for parameter entities



commit 872fea9485bd715aeccdaef64cda8a4cc05bd9c5
Author: Nick Wellnhofer <wellnhofer aevum de>
Date:   Mon Jun 19 00:24:12 2017 +0200

    Get rid of "blanks wrapper" for parameter entities
    
    Now that replacement of parameter entities goes exclusively through
    xmlSkipBlankChars, we can account for the surrounding space characters
    there and remove the "blanks wrapper" hack.

 parser.c                        |   65 +++++---------------------------------
 result/errors/754946.xml.err    |    6 ++--
 result/errors/759573-2.xml.err  |   42 ++++++++++++------------
 result/errors/759573.xml.err    |   12 +++---
 result/errors10/781205.xml.err  |    6 ++--
 result/valid/766956.xml.err     |    6 ++--
 result/valid/766956.xml.err.rdr |    6 ++--
 result/valid/t8.xml.err         |   18 +++++-----
 result/valid/t8.xml.err.rdr     |   18 +++++-----
 result/valid/t8a.xml.err        |   18 +++++-----
 result/valid/t8a.xml.err.rdr    |   18 +++++-----
 11 files changed, 84 insertions(+), 131 deletions(-)
---
diff --git a/parser.c b/parser.c
index 4556faa..f561e2f 100644
--- a/parser.c
+++ b/parser.c
@@ -2169,7 +2169,6 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
        while (1) {
             if (IS_BLANK_CH(CUR)) { /* CHECKED tstblanks.xml */
                NEXT;
-               res++;
            } else if (CUR == '%') {
                 /*
                  * Need to handle support of entities branching here
@@ -2184,6 +2183,15 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
             } else {
                 break;
             }
+
+            /*
+             * Also increase the counter when entering or exiting a PERef.
+             * The spec says: "When a parameter-entity reference is recognized
+             * in the DTD and included, its replacement text MUST be enlarged
+             * by the attachment of one leading and one following space (#x20)
+             * character."
+             */
+           res++;
         }
     }
     return(res);
@@ -2447,57 +2455,6 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
 }
 
 /**
- * xmlNewBlanksWrapperInputStream:
- * @ctxt:  an XML parser context
- * @entity:  an Entity pointer
- *
- * Create a new input stream for wrapping
- * blanks around a PEReference
- *
- * Returns the new input stream or NULL
- */
-
-static void deallocblankswrapper (xmlChar *str) {xmlFree(str);}
-
-static xmlParserInputPtr
-xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
-    xmlParserInputPtr input;
-    xmlChar *buffer;
-    size_t length;
-    if (entity == NULL) {
-       xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
-                   "xmlNewBlanksWrapperInputStream entity\n");
-       return(NULL);
-    }
-    if (xmlParserDebugEntities)
-       xmlGenericError(xmlGenericErrorContext,
-               "new blanks wrapper for entity: %s\n", entity->name);
-    input = xmlNewInputStream(ctxt);
-    if (input == NULL) {
-       return(NULL);
-    }
-    length = xmlStrlen(entity->name) + 5;
-    buffer = xmlMallocAtomic(length);
-    if (buffer == NULL) {
-       xmlErrMemory(ctxt, NULL);
-        xmlFree(input);
-       return(NULL);
-    }
-    buffer [0] = ' ';
-    buffer [1] = '%';
-    buffer [length-3] = ';';
-    buffer [length-2] = ' ';
-    buffer [length-1] = 0;
-    memcpy(buffer + 2, entity->name, length - 5);
-    input->free = deallocblankswrapper;
-    input->base = buffer;
-    input->cur = buffer;
-    input->length = length;
-    input->end = &buffer[length];
-    return(input);
-}
-
-/**
  * xmlParserHandlePEReference:
  * @ctxt:  the parser context
  *
@@ -7945,10 +7902,6 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
            xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
                  "Internal: %%%s; is not a parameter entity\n",
                          name, NULL);
-       } else if (ctxt->input->free != deallocblankswrapper) {
-           input = xmlNewBlanksWrapperInputStream(ctxt, entity);
-           if (xmlPushInput(ctxt, input) < 0)
-               return;
        } else {
             xmlChar start[4];
             xmlCharEncoding enc;
diff --git a/result/errors/754946.xml.err b/result/errors/754946.xml.err
index 4c19526..be77781 100644
--- a/result/errors/754946.xml.err
+++ b/result/errors/754946.xml.err
@@ -1,7 +1,7 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/errors/754946.xml:3: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %SYSTEM; 
-         ^
+  %SYSTEM;
+          ^
 Entity: line 1: 
 A<lbbbbbbbbbbbbbbbbbbb_
 ^
diff --git a/result/errors/759573-2.xml.err b/result/errors/759573-2.xml.err
index 0551c9e..86d6420 100644
--- a/result/errors/759573-2.xml.err
+++ b/result/errors/759573-2.xml.err
@@ -1,48 +1,48 @@
 Entity: line 1: parser error : Space required after '<!ENTITY'
- %zz; 
-     ^
+%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
         ^
 Entity: line 1: parser error : xmlParseEntityDecl: no name
- %zz; 
-     ^
+%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
         ^
 Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected
- %zz; 
-     ^
+%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
                    ^
-Entity: line 1: parser error : Space required after '<!ENTITY'
- %zz; 
-     ^
+Entity: line 3: parser error : Space required after '<!ENTITY'
+%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
         ^
-Entity: line 1: parser error : xmlParseEntityDecl: no name
- %zz; 
-     ^
+Entity: line 3: parser error : xmlParseEntityDecl: no name
+%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
         ^
-Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected
- %zz; 
-     ^
+Entity: line 3: parser error : ParsePI: PI xDOCTYPEm space expected
+%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
+    ^
 Entity: line 1: 
 <!ENTITY<?xDOCTYPEm~?>
                    ^
-Entity: line 1: parser error : Space required after 'ELEMENT'
- %xx; 
-     ^
+./test/errors/759573-2.xml:6: parser error : Space required after 'ELEMENT'
+%xx;�ggKENSMYNT&#35;MENTD&#372zz;'>
+    ^
 Entity: line 3: 
 %zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
              ^
-Entity: line 1: parser error : Content error in the external subset
- %xx; 
-     ^
+./test/errors/759573-2.xml:6: parser error : Content error in the external subset
+%xx;�ggKENSMYNT&#35;MENTD&#372zz;'>
+    ^
 Entity: line 3: 
 %zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
              ^
diff --git a/result/errors/759573.xml.err b/result/errors/759573.xml.err
index 65e42c7..554039f 100644
--- a/result/errors/759573.xml.err
+++ b/result/errors/759573.xml.err
@@ -7,15 +7,15 @@ LEMENT t (A)><!ENTITY % xx '&#37;<![INCLUDE[000&#37;&#3000;000&#37;z;'><!ENTITYz
 ./test/errors/759573.xml:1: parser error : Entity value required
 LEMENT t (A)><!ENTITY % xx '&#37;<![INCLUDE[000&#37;&#3000;000&#37;z;'><!ENTITYz
                                                                                ^
-Entity: line 1: parser error : PEReference: no name
- %xx; 
-     ^
+./test/errors/759573.xml:1: parser error : PEReference: no name
+T t (A)><!ENTITY % xx '&#37;<![INCLUDE[000&#37;&#3000;000&#37;z;'><!ENTITYz>%xx;
+                                                                               ^
 Entity: line 1: 
 %<![INCLUDE[000%ஸ000%z;
  ^
-Entity: line 1: parser error : Content error in the external subset
- %xx; 
-     ^
+./test/errors/759573.xml:1: parser error : Content error in the external subset
+T t (A)><!ENTITY % xx '&#37;<![INCLUDE[000&#37;&#3000;000&#37;z;'><!ENTITYz>%xx;
+                                                                               ^
 Entity: line 1: 
 %<![INCLUDE[000%ஸ000%z;
             ^
diff --git a/result/errors10/781205.xml.err b/result/errors10/781205.xml.err
index f6395d6..3ddc203 100644
--- a/result/errors10/781205.xml.err
+++ b/result/errors10/781205.xml.err
@@ -1,7 +1,7 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/errors10/781205.xml:3: parser error : internal error: xmlParseInternalSubset: error detected in 
Markup declaration
 
- %a; 
-    ^
+  %a;
+     ^
 Entity: line 1: 
 <:0000
 ^
diff --git a/result/valid/766956.xml.err b/result/valid/766956.xml.err
index 34b1dae..b4ac1e5 100644
--- a/result/valid/766956.xml.err
+++ b/result/valid/766956.xml.err
@@ -1,9 +1,9 @@
 test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
 %ä%ent;
    ^
-Entity: line 1: parser error : Content error in the external subset
- %ent; 
-      ^
+test/valid/dtds/766956.dtd:2: parser error : Content error in the external subset
+%ä%ent;
+        ^
 Entity: line 1: 
 value
 ^
diff --git a/result/valid/766956.xml.err.rdr b/result/valid/766956.xml.err.rdr
index 7760346..4286379 100644
--- a/result/valid/766956.xml.err.rdr
+++ b/result/valid/766956.xml.err.rdr
@@ -1,9 +1,9 @@
 test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
 %ä%ent;
    ^
-Entity: line 1: parser error : Content error in the external subset
- %ent; 
-      ^
+test/valid/dtds/766956.dtd:2: parser error : Content error in the external subset
+%ä%ent;
+        ^
 Entity: line 1: 
 value
 ^
diff --git a/result/valid/t8.xml.err b/result/valid/t8.xml.err
index bfe5314..5272694 100644
--- a/result/valid/t8.xml.err
+++ b/result/valid/t8.xml.err
@@ -1,21 +1,21 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defroot; 
-          ^
+%defroot; %defmiddle; %deftest;
+         ^
 Entity: line 1: 
 &lt;!ELEMENT root (middle) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defmiddle; 
-            ^
+%defroot; %defmiddle; %deftest;
+                     ^
 Entity: line 1: 
 &lt;!ELEMENT middle (test) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %deftest; 
-          ^
+%defroot; %defmiddle; %deftest;
+                               ^
 Entity: line 1: 
 &lt;!ELEMENT test (#PCDATA) >
 ^
diff --git a/result/valid/t8.xml.err.rdr b/result/valid/t8.xml.err.rdr
index 3b2cd26..8da08fb 100644
--- a/result/valid/t8.xml.err.rdr
+++ b/result/valid/t8.xml.err.rdr
@@ -1,21 +1,21 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defroot; 
-          ^
+%defroot; %defmiddle; %deftest;
+         ^
 Entity: line 1: 
 &lt;!ELEMENT root (middle) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defmiddle; 
-            ^
+%defroot; %defmiddle; %deftest;
+                     ^
 Entity: line 1: 
 &lt;!ELEMENT middle (test) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %deftest; 
-          ^
+%defroot; %defmiddle; %deftest;
+                               ^
 Entity: line 1: 
 &lt;!ELEMENT test (#PCDATA) >
 ^
diff --git a/result/valid/t8a.xml.err b/result/valid/t8a.xml.err
index bfe5314..2846b19 100644
--- a/result/valid/t8a.xml.err
+++ b/result/valid/t8a.xml.err
@@ -1,21 +1,21 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defroot; 
-          ^
+%defroot;%defmiddle;%deftest;
+         ^
 Entity: line 1: 
 &lt;!ELEMENT root (middle) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defmiddle; 
-            ^
+%defroot;%defmiddle;%deftest;
+                    ^
 Entity: line 1: 
 &lt;!ELEMENT middle (test) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %deftest; 
-          ^
+%defroot;%defmiddle;%deftest;
+                             ^
 Entity: line 1: 
 &lt;!ELEMENT test (#PCDATA) >
 ^
diff --git a/result/valid/t8a.xml.err.rdr b/result/valid/t8a.xml.err.rdr
index d1bd92e..6abe75a 100644
--- a/result/valid/t8a.xml.err.rdr
+++ b/result/valid/t8a.xml.err.rdr
@@ -1,21 +1,21 @@
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defroot; 
-          ^
+%defroot;%defmiddle;%deftest;
+         ^
 Entity: line 1: 
 &lt;!ELEMENT root (middle) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %defmiddle; 
-            ^
+%defroot;%defmiddle;%deftest;
+                    ^
 Entity: line 1: 
 &lt;!ELEMENT middle (test) >
 ^
-Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup 
declaration
 
- %deftest; 
-          ^
+%defroot;%defmiddle;%deftest;
+                             ^
 Entity: line 1: 
 &lt;!ELEMENT test (#PCDATA) >
 ^


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