aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@redhat.com>2015-09-10 19:41:41 +0800
committerDaniel Veillard <veillard@redhat.com>2015-09-10 19:46:46 +0800
commitef709ce2f7b792d5fb69ed142796d743fb1eb388 (patch)
tree5060fdcc5f571307673e485f6f5478bed66377cb
parent3eaedba1b64180668fdab7ad2eba549586017bf3 (diff)
downloadandroid_external_libxml2-ef709ce2f7b792d5fb69ed142796d743fb1eb388.tar.gz
android_external_libxml2-ef709ce2f7b792d5fb69ed142796d743fb1eb388.tar.bz2
android_external_libxml2-ef709ce2f7b792d5fb69ed142796d743fb1eb388.zip
Fix the spurious ID already defined error
For https://bugzilla.gnome.org/show_bug.cgi?id=737840 the fix for 724903 introduced a regression on external entities carrying IDs, revert that patch in part and add a specific test to avoid readding it
-rw-r--r--result/valid/737840.xml10
-rw-r--r--result/valid/737840.xml.err0
-rw-r--r--result/valid/737840.xml.err.rdr0
-rw-r--r--test/valid/737840.xml10
-rw-r--r--test/valid/dtds/737840.ent1
-rw-r--r--valid.c6
6 files changed, 25 insertions, 2 deletions
diff --git a/result/valid/737840.xml b/result/valid/737840.xml
new file mode 100644
index 00000000..433c6d6d
--- /dev/null
+++ b/result/valid/737840.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (elem)>
+<!ELEMENT elem (#PCDATA)>
+<!ATTLIST elem id ID #IMPLIED>
+<!ENTITY target SYSTEM "dtds/737840.ent">
+]>
+<root>
+ &target;
+</root>
diff --git a/result/valid/737840.xml.err b/result/valid/737840.xml.err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/valid/737840.xml.err
diff --git a/result/valid/737840.xml.err.rdr b/result/valid/737840.xml.err.rdr
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/valid/737840.xml.err.rdr
diff --git a/test/valid/737840.xml b/test/valid/737840.xml
new file mode 100644
index 00000000..2d27b731
--- /dev/null
+++ b/test/valid/737840.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root [
+<!ELEMENT root (elem)>
+<!ELEMENT elem (#PCDATA)>
+<!ATTLIST elem id ID #IMPLIED>
+<!ENTITY target SYSTEM "dtds/737840.ent">
+]>
+
+<root>
+ &target;
+</root>
diff --git a/test/valid/dtds/737840.ent b/test/valid/dtds/737840.ent
new file mode 100644
index 00000000..e9721324
--- /dev/null
+++ b/test/valid/dtds/737840.ent
@@ -0,0 +1 @@
+<elem id="id0"/> \ No newline at end of file
diff --git a/valid.c b/valid.c
index 409aa81d..45a3f703 100644
--- a/valid.c
+++ b/valid.c
@@ -2634,8 +2634,10 @@ xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
/*
* The id is already defined in this DTD.
*/
- xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
- "ID %s already defined\n", value, NULL, NULL);
+ if (ctxt != NULL) {
+ xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
+ "ID %s already defined\n", value, NULL, NULL);
+ }
#endif /* LIBXML_VALID_ENABLED */
xmlFreeID(ret);
return(NULL);