From: Daniel Veillard Date: Thu, 10 Sep 2015 19:41:41 +0800 Subject: 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 --- result/valid/737840.xml | 10 ++++++++++ result/valid/737840.xml.err | 0 result/valid/737840.xml.err.rdr | 0 test/valid/737840.xml | 10 ++++++++++ test/valid/dtds/737840.ent | 1 + valid.c | 6 ++++-- 6 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 result/valid/737840.xml create mode 100644 result/valid/737840.xml.err create mode 100644 result/valid/737840.xml.err.rdr create mode 100644 test/valid/737840.xml create mode 100644 test/valid/dtds/737840.ent diff --git a/result/valid/737840.xml b/result/valid/737840.xml new file mode 100644 index 0000000..433c6d6 --- /dev/null +++ b/result/valid/737840.xml @@ -0,0 +1,10 @@ + + + + + +]> + + ⌖ + diff --git a/result/valid/737840.xml.err b/result/valid/737840.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/737840.xml.err.rdr b/result/valid/737840.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/test/valid/737840.xml b/test/valid/737840.xml new file mode 100644 index 0000000..2d27b73 --- /dev/null +++ b/test/valid/737840.xml @@ -0,0 +1,10 @@ + + + + +]> + + + ⌖ + diff --git a/test/valid/dtds/737840.ent b/test/valid/dtds/737840.ent new file mode 100644 index 0000000..e972132 --- /dev/null +++ b/test/valid/dtds/737840.ent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/valid.c b/valid.c index 409aa81..45a3f70 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);