From 238719184e67939b1cdb8269a9b067b7543c6ab9 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sun, 29 Jun 2025 18:43:53 -0600 Subject: [PATCH] Prevent assert (and access violation) in wxWidgets. (It directly dereferences the ArrayString with the FilterIndex, without bounds checking it.) --- gerbview/files.cpp | 7 ++++++- pcbnew/footprint_libraries_utils.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gerbview/files.cpp b/gerbview/files.cpp index 704d72dcf8..704c6ad626 100644 --- a/gerbview/files.cpp +++ b/gerbview/files.cpp @@ -142,7 +142,12 @@ bool GERBVIEW_FRAME::LoadFileOrShowDialog( const wxString& aFileName, wxFileDialog dlg( this, dialogTitle, currentPath, filename.GetFullName(), dialogFiletypes, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE | wxFD_CHANGE_DIR ); - dlg.SetFilterIndex( lastGerberFileWildcard ); + + wxArrayString dummy1, dummy2; + const int nWildcards = wxParseCommonDialogsFilter( dialogFiletypes, dummy1, dummy2 ); + + if( lastGerberFileWildcard >= 0 && lastGerberFileWildcard < nWildcards ) + dlg.SetFilterIndex( lastGerberFileWildcard ); if( dlg.ShowModal() == wxID_CANCEL ) return false; diff --git a/pcbnew/footprint_libraries_utils.cpp b/pcbnew/footprint_libraries_utils.cpp index 860272fe36..d9891be2c5 100644 --- a/pcbnew/footprint_libraries_utils.cpp +++ b/pcbnew/footprint_libraries_utils.cpp @@ -114,6 +114,7 @@ FOOTPRINT* FOOTPRINT_EDIT_FRAME::ImportFootprint( const wxString& aName ) } wxString allWildcardsStr; + for( const wxString& wildcard : allWildcardsSet ) allWildcardsStr << wildcard; @@ -123,7 +124,11 @@ FOOTPRINT* FOOTPRINT_EDIT_FRAME::ImportFootprint( const wxString& aName ) wxFileDialog dlg( this, _( "Import Footprint" ), m_mruPath, wxEmptyString, fileFiltersStr, wxFD_OPEN | wxFD_FILE_MUST_EXIST ); - dlg.SetFilterIndex( lastFilterIndex ); + wxArrayString dummy1, dummy2; + const int nWildcards = wxParseCommonDialogsFilter( fileFiltersStr, dummy1, dummy2 ); + + if( lastFilterIndex >= 0 && lastFilterIndex < nWildcards ) + dlg.SetFilterIndex( lastFilterIndex ); if( dlg.ShowModal() == wxID_CANCEL ) return nullptr;