[libxml2] Only warn on invalid redeclarations of predefined entities



commit ce0871e15cdb68e505ccd9d9c96ff8455ed936ab
Author: Nick Wellnhofer <wellnhofer aevum de>
Date:   Sun Feb 20 16:44:41 2022 +0100

    Only warn on invalid redeclarations of predefined entities
    
    Downgrade the error message to a warning since the error was ignored,
    anyway. Also print the name of redeclared entity. For a proper fix that
    also shows filename and line number of the invalid redeclaration, we'd
    have to
    
    - pass the parser context to the entity functions somehow, or
    - make these functions return distinct error codes.
    
    Partial fix for #308.

 entities.c                       | 21 +++++++++++++++++++--
 result/errors/ent_redecl.xml     |  3 +++
 result/errors/ent_redecl.xml.ent |  1 +
 result/errors/ent_redecl.xml.err |  1 +
 result/errors/ent_redecl.xml.str |  1 +
 test/errors/ent_redecl.xml       |  4 ++++
 6 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/entities.c b/entities.c
index 1a8f86f0..a27209d1 100644
--- a/entities.c
+++ b/entities.c
@@ -94,6 +94,23 @@ xmlEntitiesErr(xmlParserErrors code, const char *msg)
     __xmlSimpleError(XML_FROM_TREE, code, NULL, msg, NULL);
 }
 
+/**
+ * xmlEntitiesWarn:
+ * @code:  the error code
+ * @msg:  the message
+ *
+ * Handle an out of memory condition
+ */
+static void LIBXML_ATTR_FORMAT(2,0)
+xmlEntitiesWarn(xmlParserErrors code, const char *msg, const xmlChar *str1)
+{
+    __xmlRaiseError(NULL, NULL, NULL,
+                NULL, NULL, XML_FROM_TREE, code,
+                XML_ERR_WARNING, NULL, 0,
+                (const char *)str1, NULL, NULL, 0, 0,
+                msg, (const char *)str1, NULL);
+}
+
 /*
  * xmlFreeEntity : clean-up an entity record.
  */
@@ -255,9 +272,9 @@ xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type,
                     }
                 }
                 if (!valid) {
-                    xmlEntitiesErr(XML_ERR_ENTITY_PROCESSING,
+                    xmlEntitiesWarn(XML_ERR_ENTITY_PROCESSING,
                             "xmlAddEntity: invalid redeclaration of predefined"
-                            " entity");
+                            " entity '%s'", name);
                     return(NULL);
                 }
             }
diff --git a/result/errors/ent_redecl.xml b/result/errors/ent_redecl.xml
new file mode 100644
index 00000000..04216b65
--- /dev/null
+++ b/result/errors/ent_redecl.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc>
+<doc/>
diff --git a/result/errors/ent_redecl.xml.ent b/result/errors/ent_redecl.xml.ent
new file mode 100644
index 00000000..31908b05
--- /dev/null
+++ b/result/errors/ent_redecl.xml.ent
@@ -0,0 +1 @@
+warning : xmlAddEntity: invalid redeclaration of predefined entity 'lt'
diff --git a/result/errors/ent_redecl.xml.err b/result/errors/ent_redecl.xml.err
new file mode 100644
index 00000000..31908b05
--- /dev/null
+++ b/result/errors/ent_redecl.xml.err
@@ -0,0 +1 @@
+warning : xmlAddEntity: invalid redeclaration of predefined entity 'lt'
diff --git a/result/errors/ent_redecl.xml.str b/result/errors/ent_redecl.xml.str
new file mode 100644
index 00000000..31908b05
--- /dev/null
+++ b/result/errors/ent_redecl.xml.str
@@ -0,0 +1 @@
+warning : xmlAddEntity: invalid redeclaration of predefined entity 'lt'
diff --git a/test/errors/ent_redecl.xml b/test/errors/ent_redecl.xml
new file mode 100644
index 00000000..e446681b
--- /dev/null
+++ b/test/errors/ent_redecl.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+    <!ENTITY lt '<'>
+]>
+<doc/>


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