From 40a4dd5242582240dcf0b3347b0046ac98cc3404 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Wed, 18 Apr 2007 02:37:01 +0000 Subject: [PATCH] Fix detection of missing close tags at the end of a document (STR #45) --- CHANGES | 2 ++ doc/relnotes.html | 3 +++ mxml-file.c | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 66108d9..54e5a72 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,8 @@ CHANGES IN Mini-XML 2.3 - Added two exceptions to the LGPL to support static linking of applications against Mini-XML. + - mxmlLoad*() did not detect missing close tags at the end + of an XML document. - Added user_data and ref_count members to mxml_node_t structure. - Added mxmlReleaseNode() and mxmlRetainNode() APIs for diff --git a/doc/relnotes.html b/doc/relnotes.html index 254e33c..54e4398 100644 --- a/doc/relnotes.html +++ b/doc/relnotes.html @@ -10,6 +10,9 @@
  • Added two exceptions to the LGPL to support static linking of applications against Mini-XML.
  • +
  • mxmlLoad*() did not detect missing close tags at the end + of an XML document.
  • +
  • Added user_data and ref_count members to mxml_node_t structure.
  • diff --git a/mxml-file.c b/mxml-file.c index 5893679..004c5e7 100644 --- a/mxml-file.c +++ b/mxml-file.c @@ -1748,7 +1748,7 @@ mxml_load_data(mxml_node_t *top, /* I - Top node */ */ mxml_error("Mismatched close tag <%s> under parent <%s>!", - buffer, parent ? parent->value.element.name : "(nil)"); + buffer, parent ? parent->value.element.name : "(null)"); goto error; } @@ -1856,8 +1856,21 @@ mxml_load_data(mxml_node_t *top, /* I - Top node */ if (parent) { + node = parent; + while (parent->parent != top && parent->parent) parent = parent->parent; + + if (node != parent) + { + mxml_error("Missing close tag under parent <%s>!", + node->value.element.name, + node->parent ? node->parent->value.element.name : "(null)"); + + mxmlDelete(first); + + return (NULL); + } } return (parent);