Don't compare invalid iterators in wxCommandProcessor code.

Comparing invalid iterators results in an assert failure in STL build.

We might also change wxList::compatibility_iterator::operator==() to allow
comparing invalid iterators (which should be different from all the other ones
but what about comparing two invalid iterators?) but it would probably be
better to get rid of all uses of compatibility_iterator in the code instead in
the long term.

Closes #12730.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66287 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-28 15:14:49 +00:00
parent a6c4ae18ba
commit 7e0b0eb38f

View File

@@ -122,13 +122,14 @@ void wxCommandProcessor::Store(wxCommand *command)
while (node)
{
wxList::compatibility_iterator next = node->GetNext();
delete (wxCommand *)node->GetData();
m_commands.Erase(node);
// Make sure m_lastSavedCommand won't point to freed memory
if ( m_lastSavedCommand == node )
if ( m_lastSavedCommand && m_lastSavedCommand == node )
m_lastSavedCommand = wxList::compatibility_iterator();
delete (wxCommand *)node->GetData();
m_commands.Erase(node);
node = next;
}
}
@@ -136,13 +137,14 @@ void wxCommandProcessor::Store(wxCommand *command)
if ( (int)m_commands.GetCount() == m_maxNoCommands )
{
wxList::compatibility_iterator firstNode = m_commands.GetFirst();
// Make sure m_lastSavedCommand won't point to freed memory
if ( m_lastSavedCommand && m_lastSavedCommand == firstNode )
m_lastSavedCommand = wxList::compatibility_iterator();
wxCommand *firstCommand = (wxCommand *)firstNode->GetData();
delete firstCommand;
m_commands.Erase(firstNode);
// Make sure m_lastSavedCommand won't point to freed memory
if ( m_lastSavedCommand == firstNode )
m_lastSavedCommand = wxList::compatibility_iterator();
}
m_commands.Append(command);