// pNewLast can be NULL here -- it's ok and can happen if we have no
// entries left
m_pLastEntry = pNewLast;
+
+ // For the root group only, we could be removing the first group line
+ // here, so update m_pLine to avoid keeping a dangling pointer.
+ if ( pLine == m_pLine )
+ SetLine(NULL);
}
m_pConfig->LineListRemove(pLine);
CPPUNIT_TEST( Save );
CPPUNIT_TEST( DeleteEntry );
CPPUNIT_TEST( DeleteAndWriteEntry );
+ CPPUNIT_TEST( DeleteLastRootEntry );
CPPUNIT_TEST( DeleteGroup );
CPPUNIT_TEST( DeleteAll );
CPPUNIT_TEST( RenameEntry );
void Save();
void DeleteEntry();
void DeleteAndWriteEntry();
+ void DeleteLastRootEntry();
void DeleteGroup();
void DeleteAll();
void RenameEntry();
wxVERIFY_FILECONFIG( "", fc );
}
+void FileConfigTestCase::DeleteLastRootEntry()
+{
+ // This tests for the bug which occurred when the last entry of the root
+ // group was deleted: this corrupted internal state and resulted in a crash
+ // after trying to write the just deleted entry again.
+ wxStringInputStream sis("");
+ wxFileConfig fc(sis);
+
+ fc.Write("key", "value");
+ wxVERIFY_FILECONFIG( "key=value\n", fc );
+
+ fc.DeleteEntry("key");
+ wxVERIFY_FILECONFIG( "", fc );
+
+ fc.Write("key", "value");
+ wxVERIFY_FILECONFIG( "key=value\n", fc );
+}
+
void FileConfigTestCase::DeleteGroup()
{
wxStringInputStream sis(testconfig);