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 %s> under parent <%s>!",
+ node->value.element.name,
+ node->parent ? node->parent->value.element.name : "(null)");
+
+ mxmlDelete(first);
+
+ return (NULL);
+ }
}
return (parent);