Merge pull request #558 from leethomason/clone
Support clone (deep copy) of XMLDocument and XMLNode
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 5c459a6..772d2ae 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -2006,6 +2006,7 @@
void XMLDocument::MarkInUse(XMLNode* node)
{
+ TIXMLASSERT(node);
TIXMLASSERT(node->_parent == 0);
for (int i = 0; i < _unlinked.Size(); ++i) {
diff --git a/tinyxml2.h b/tinyxml2.h
index f307059..3465f2f 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -265,8 +265,8 @@
}
void SwapRemove(int i) {
- TIXMLASSERT(i >= 0);
- TIXMLASSERT(i < _size);
+ TIXMLASSERT(i >= 0 && i < _size);
+ TIXMLASSERT(_size > 0);
_mem[i] = _mem[_size - 1];
--_size;
}
diff --git a/xmltest.cpp b/xmltest.cpp
index 18d09ad..550bf75 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -292,6 +292,10 @@
_CrtMemCheckpoint( &startMemState );
// Enable MS Visual C++ debug heap memory leaks dump on exit
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
+ {
+ int leaksOnStart = _CrtDumpMemoryLeaks();
+ XMLTest( "No leaks on start?", FALSE, leaksOnStart );
+ }
#endif
{
@@ -1934,6 +1938,11 @@
_CrtMemState diffMemState;
_CrtMemDifference( &diffMemState, &startMemState, &endMemState );
_CrtMemDumpStatistics( &diffMemState );
+
+ {
+ int leaksBeforeExit = _CrtDumpMemoryLeaks();
+ XMLTest( "No leaks before exit?", FALSE, leaksBeforeExit );
+ }
#endif
printf ("\nPass %d, Fail %d\n", gPass, gFail);