Pcbnew: fix a crash due to use of invalid pointers after a list modification

Fixes #4409
https://gitlab.com/kicad/code/kicad/issues/4409
This commit is contained in:
jean-pierre charras 2020-05-13 11:51:56 +02:00
parent 2cf82d9129
commit 23927957e1
1 changed files with 11 additions and 4 deletions

View File

@ -607,20 +607,27 @@ bool DIALOG_FOOTPRINT_FP_EDITOR::TransferDataFromWindow()
m_footprint->Value() = m_texts->at( 1 );
size_t i = 2;
for( auto item : m_footprint->GraphicalItems() )
std::vector<TEXTE_MODULE*> items_to_remove;
for( BOARD_ITEM* item : m_footprint->GraphicalItems() )
{
TEXTE_MODULE* textModule = dyn_cast<TEXTE_MODULE*>( item );
TEXTE_MODULE* textModule = dynamic_cast<TEXTE_MODULE*>( item );
if( textModule )
{
// copy grid table entries till we run out, then delete any remaining texts
if( i < m_texts->size() )
*textModule = m_texts->at( i++ );
else
textModule->DeleteStructure();
else // store this item to remove and delete it later,
// after the graphic list is explored:
items_to_remove.push_back( textModule );
}
}
// Remove items from m_footprint graphic list:
for( TEXTE_MODULE* item: items_to_remove )
item->DeleteStructure();
// if there are still grid table entries, create new texts for them
while( i < m_texts->size() )
{