mirror of
				https://github.com/AxioDL/tinyxml2.git
				synced 2025-10-27 12:20:25 +00:00 
			
		
		
		
	start working through memory bugs
This commit is contained in:
		
							parent
							
								
									ee2c46928e
								
							
						
					
					
						commit
						cd011bc1b7
					
				
							
								
								
									
										24
									
								
								tinyxml2.cpp
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								tinyxml2.cpp
									
									
									
									
									
								
							| @ -1765,6 +1765,24 @@ static FILE* callfopen( const char* filepath, const char* mode ) | ||||
| #endif | ||||
|     return fp; | ||||
| } | ||||
|      | ||||
| void XMLDocument::DeleteNode( XMLNode* node )	{ | ||||
|     TIXMLASSERT( node ); | ||||
|     TIXMLASSERT(node->_document == this ); | ||||
|     if (node->_parent) { | ||||
|         node->_parent->DeleteChild( node ); | ||||
|     } | ||||
|     else { | ||||
|         // Isn't in the tree.
 | ||||
|         // Use the parent delete.
 | ||||
|         // Also, we need to mark it tracked: we 'know'
 | ||||
|         // it was never used.
 | ||||
|         node->_memPool->SetTracked(); | ||||
|         // Call the static XMLNode version:
 | ||||
|         XMLNode::DeleteNode(node); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| XMLError XMLDocument::LoadFile( const char* filename ) | ||||
| { | ||||
| @ -1949,9 +1967,9 @@ XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : | ||||
|             _entityFlag[ (int)entities[i].value ] = true; | ||||
|         } | ||||
|     } | ||||
|     _restrictedEntityFlag[(int)'&'] = true; | ||||
|     _restrictedEntityFlag[(int)'<'] = true; | ||||
|     _restrictedEntityFlag[(int)'>'] = true;	// not required, but consistency is nice
 | ||||
|     _restrictedEntityFlag['&'] = true; | ||||
|     _restrictedEntityFlag['<'] = true; | ||||
|     _restrictedEntityFlag['>'] = true;	// not required, but consistency is nice
 | ||||
|     _buffer.Push( 0 ); | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										12
									
								
								tinyxml2.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tinyxml2.h
									
									
									
									
									
								
							| @ -1555,7 +1555,11 @@ public: | ||||
| 
 | ||||
|     /**
 | ||||
|     	Load an XML file from disk. You are responsible | ||||
|     	for providing and closing the FILE*. | ||||
|     	for providing and closing the FILE*.  | ||||
|       | ||||
|         NOTE: The file should be opened as binary ("rb") | ||||
|         not text in order for TinyXML-2 to correctly | ||||
|         do newline normalization. | ||||
| 
 | ||||
|     	Returns XML_NO_ERROR (0) on success, or | ||||
|     	an errorID. | ||||
| @ -1665,11 +1669,7 @@ public: | ||||
|     	Delete a node associated with this document. | ||||
|     	It will be unlinked from the DOM. | ||||
|     */ | ||||
|     void DeleteNode( XMLNode* node )	{ | ||||
|         TIXMLASSERT( node ); | ||||
|         TIXMLASSERT( node->_parent ); | ||||
|         node->_parent->DeleteChild( node ); | ||||
|     } | ||||
|     void DeleteNode( XMLNode* node ); | ||||
| 
 | ||||
|     void SetError( XMLError error, const char* str1, const char* str2 ); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										15
									
								
								xmltest.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								xmltest.cpp
									
									
									
									
									
								
							| @ -1334,10 +1334,10 @@ int main( int argc, const char ** argv ) | ||||
| 
 | ||||
| 	{ | ||||
| 		// Test that it doesn't crash.
 | ||||
| 		const char* xml = "<?xml version=\"1.0\"?><root><sample><field0><1</field0><field1>2</field1></sample></root>"; | ||||
| 		XMLDocument doc; | ||||
| 		doc.Parse(xml); | ||||
| 		doc.PrintError(); | ||||
| 		const char* xml = "<?xml version=\"1.0\"?><root><sample><field0><1</field0><field1>2</field1></sample></root>"; | ||||
| 		XMLDocument doc; | ||||
| 		doc.Parse(xml); | ||||
| 		doc.PrintError(); | ||||
| 	} | ||||
| 
 | ||||
| #if 1 | ||||
| @ -1390,6 +1390,13 @@ int main( int argc, const char ** argv ) | ||||
|             doc.Clear(); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     { | ||||
|         // If this doesn't assert in DEBUG, all is well.
 | ||||
|         tinyxml2::XMLDocument doc; | ||||
|         tinyxml2::XMLElement *pRoot = doc.NewElement("Root"); | ||||
|         doc.DeleteNode(pRoot); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| 	// ----------- Performance tracking --------------
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user