Don't accidentally add NULL ptrs to the LibSymbols cache.

Operator[] will add a blank element if it isn't found in the map.

Probably Sentry KICAD-23Y.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/14927
This commit is contained in:
Jeff Young 2023-06-11 15:44:12 +01:00
parent 93789e75b9
commit 96073402ce
4 changed files with 10 additions and 8 deletions

View File

@ -94,9 +94,12 @@ SCH_SYMBOL* NETLIST_EXPORTER_BASE::findNextSymbol( EDA_ITEM* aItem, SCH_SHEET_PA
wxCHECK( screen, nullptr ); wxCHECK( screen, nullptr );
LIB_SYMBOL* libSymbol = screen->GetLibSymbols()[ symbol->GetSchSymbolLibraryName() ]; auto it = screen->GetLibSymbols().find( symbol->GetSchSymbolLibraryName() );
wxCHECK( libSymbol, nullptr ); if( it == screen->GetLibSymbols().end() )
return nullptr;
LIB_SYMBOL* libSymbol = it->second;
// If symbol is a "multi parts per package" type // If symbol is a "multi parts per package" type
if( libSymbol->GetUnitCount() > 1 ) if( libSymbol->GetUnitCount() > 1 )

View File

@ -816,7 +816,7 @@ void SCH_EDIT_FRAME::HardRedraw()
for( SCH_ITEM* item : screen->Items() ) for( SCH_ITEM* item : screen->Items() )
item->ClearCaches(); item->ClearCaches();
for( std::pair<const wxString, LIB_SYMBOL*>& libSymbol : screen->GetLibSymbols() ) for( const std::pair<const wxString, LIB_SYMBOL*>& libSymbol : screen->GetLibSymbols() )
{ {
wxCHECK2( libSymbol.second, continue ); wxCHECK2( libSymbol.second, continue );
libSymbol.second->ClearCaches(); libSymbol.second->ClearCaches();
@ -1971,8 +1971,8 @@ void SCH_EDIT_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
for( SCH_ITEM* item : screen->Items() ) for( SCH_ITEM* item : screen->Items() )
item->ClearCaches(); item->ClearCaches();
for( std::pair<const wxString, LIB_SYMBOL*>& libSymbol : screen->GetLibSymbols() ) for( const auto& [ libItemName, libSymbol ] : screen->GetLibSymbols() )
libSymbol.second->ClearCaches(); libSymbol->ClearCaches();
GetCanvas()->ForceRefresh(); GetCanvas()->ForceRefresh();

View File

@ -376,8 +376,8 @@ void SCH_SEXPR_PLUGIN::Format( SCH_SHEET* aSheet )
// Save cache library. // Save cache library.
m_out->Print( 1, "(lib_symbols\n" ); m_out->Print( 1, "(lib_symbols\n" );
for( std::pair<const wxString, LIB_SYMBOL*>& libSymbol : screen->GetLibSymbols() ) for( const auto& [ libItemName, libSymbol ] : screen->GetLibSymbols() )
SCH_SEXPR_PLUGIN_CACHE::SaveSymbol( libSymbol.second, *m_out, 2, libSymbol.first ); SCH_SEXPR_PLUGIN_CACHE::SaveSymbol( libSymbol, *m_out, 2, libItemName );
m_out->Print( 1, ")\n\n" ); m_out->Print( 1, ")\n\n" );

View File

@ -478,7 +478,6 @@ public:
* *
* @return The list of unique #LIB_SYMBOL object pointers. * @return The list of unique #LIB_SYMBOL object pointers.
*/ */
std::map<wxString, LIB_SYMBOL*>& GetLibSymbols() { return m_libSymbols; }
const std::map<wxString, LIB_SYMBOL*>& GetLibSymbols() const { return m_libSymbols; } const std::map<wxString, LIB_SYMBOL*>& GetLibSymbols() const { return m_libSymbols; }
/** /**