diff --git a/CHANGES b/CHANGES index 2f1f5b5..83ff9ab 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ CHANGES IN Mini-XML 2.7 exceptions to the LGPL2 (STR #108) - The shared library did not include a destructor for the thread- specific data key on UNIX-based operating systems (STR #103) + - mxmlLoad* did not error out on XML with multiple root nodes (STR #101) CHANGES IN Mini-XML 2.6 diff --git a/mxml-file.c b/mxml-file.c index 8bf52d8..ef2b81e 100644 --- a/mxml-file.c +++ b/mxml-file.c @@ -1650,6 +1650,17 @@ mxml_load_data( *bufptr = '\0'; + if (!parent && first) + { + /* + * There can only be one root element! + */ + + mxml_error("<%s> cannot be a second root node after <%s>", + buffer, first->value.element.name); + goto error; + } + if ((node = mxmlNewElement(parent, buffer)) == NULL) { /* @@ -1707,6 +1718,17 @@ mxml_load_data( *bufptr = '\0'; + if (!parent && first) + { + /* + * There can only be one root element! + */ + + mxml_error("<%s> cannot be a second root node after <%s>", + buffer, first->value.element.name); + goto error; + } + if ((node = mxmlNewElement(parent, buffer)) == NULL) { /* @@ -1763,6 +1785,17 @@ mxml_load_data( *bufptr = '\0'; + if (!parent && first) + { + /* + * There can only be one root element! + */ + + mxml_error("<%s> cannot be a second root node after <%s>", + buffer, first->value.element.name); + goto error; + } + if ((node = mxmlNewElement(parent, buffer)) == NULL) { /* @@ -1838,6 +1871,17 @@ mxml_load_data( *bufptr = '\0'; + if (!parent && first) + { + /* + * There can only be one root element! + */ + + mxml_error("<%s> cannot be a second root node after <%s>", + buffer, first->value.element.name); + goto error; + } + if ((node = mxmlNewElement(parent, buffer)) == NULL) { /* @@ -1918,6 +1962,17 @@ mxml_load_data( * Handle open tag... */ + if (!parent && first) + { + /* + * There can only be one root element! + */ + + mxml_error("<%s> cannot be a second root node after <%s>", + buffer, first->value.element.name); + goto error; + } + if ((node = mxmlNewElement(parent, buffer)) == NULL) { /*