Browse Source

Fix issue #1048: Add null pointer check in XMLDocument::DeleteNode (#1057)

- Add null pointer check in XMLDocument::DeleteNode() method
- Add test case to verify null pointer handling
- Prevents segmentation fault when calling DeleteNode(nullptr)
zhthhh 1 week ago
parent
commit
aba13c50bf
2 changed files with 11 additions and 2 deletions
  1. 4 1
      tinyxml2.cpp
  2. 7 1
      xmltest.cpp

+ 4 - 1
tinyxml2.cpp

@@ -2347,9 +2347,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 );
     }

+ 7 - 1
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);