Merge branch 'patch-1' of https://github.com/SirR4T/tinyxml2 into SirR4T-patch-1

This commit is contained in:
Lee Thomason 2015-05-22 10:57:00 -07:00
commit 2ecc203835
2 changed files with 30 additions and 0 deletions

View File

@ -887,6 +887,17 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEnd )
break;
}
XMLDeclaration* decl = node->ToDeclaration();
if ( decl ) {
// A declaration can only be the first child of a document.
// Set error, if document already has children.
if ( !_document->NoChildren() ) {
_document->SetError( XML_ERROR_PARSING_DECLARATION, decl->Value(), 0);
DeleteNode( decl );
break;
}
}
XMLElement* ele = node->ToElement();
if ( ele ) {
// We read the end tag. Return it to the parent.

View File

@ -1460,6 +1460,25 @@ int main( int argc, const char ** argv )
XMLTest( "Error should be cleared", false, doc.Error() );
}
{
// Check that declarations are parsed only as the FirstChild
const char* xml0 = "<?xml version=\"1.0\" ?>"
" <!-- xml version=\"1.1\" -->"
"<first />";
const char* xml1 = "<?xml version=\"1.0\" ?>"
" <?xml version=\"1.1\" ?>"
"<first />";
const char* xml2 = "<first />"
"<?xml version=\"1.0\" ?>";
XMLDocument doc;
doc.Parse(xml0);
XMLTest("Test that the code changes do not affect normal parsing", doc.Error(), false);
doc.Parse(xml1);
XMLTest("Test that the second declaration throws an error", doc.Error(), true);
doc.Parse(xml2);
XMLTest("Test that declaration after a child throws an error", doc.Error(), true);
}
// ----------- Performance tracking --------------
{
#if defined( _MSC_VER )