From 7ef2dc11f9134948d270e0b26f58aabdcf332c53 Mon Sep 17 00:00:00 2001 From: zxg <3152430961@qq.com> Date: Sun, 7 Dec 2025 18:51:52 +0800 Subject: [PATCH] Fix issue #1048: Add null pointer check in XMLDocument::DeleteNode - Add null pointer check in XMLDocument::DeleteNode() method - Add test case to verify null pointer handling - Prevents segmentation fault when calling DeleteNode(nullptr) --- tinyxml2.cpp | 5 ++++- xmltest.cpp | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 50e6e2aa..3f0ab0f2 100644 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -2344,9 +2344,12 @@ static FILE* callfopen( const char* filepath, const char* mode ) return fp; } -void XMLDocument::DeleteNode( XMLNode* node ) { +void XMLDocument::DeleteNode( XMLNode* node ) { TIXMLASSERT( node ); TIXMLASSERT(node->_document == this ); + if(node == 0) { + return; // check for null pointer + } if (node->_parent) { node->_parent->DeleteChild( node ); } diff --git a/xmltest.cpp b/xmltest.cpp index 8a654e41..d058707b 100644 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -2025,7 +2025,13 @@ int main( int argc, const char ** argv ) XMLTest("Parse nested elements with pedantic whitespace", false, doc.Error()); XMLTest("Pedantic whitespace", true, 0 == doc.RootElement()->FirstChildElement()->GetText()); } - + //Check the robustness of the DeleteNode function in handling null pointers. + { + XMLDocument doc; + doc.DeleteNode(nullptr); + XMLTest("DeleteNode with null pointer", true, doc.Error() == XML_SUCCESS); + } + // Check sample xml can be parsed with pedantic mode { XMLDocument doc(true, PEDANTIC_WHITESPACE);