From af62e4276b949545a1306ec967a300acdaae3289 Mon Sep 17 00:00:00 2001 From: Alex Shvartzkop Date: Tue, 29 Aug 2023 19:13:55 +0300 Subject: [PATCH] Wrap FILE_LINE_READER in try-catch blocks in PCB plugins for CanRead*. --- pcbnew/plugins/kicad/pcb_plugin.cpp | 14 +++++++--- pcbnew/plugins/legacy/legacy_plugin.cpp | 36 ++++++++++++++----------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/pcbnew/plugins/kicad/pcb_plugin.cpp b/pcbnew/plugins/kicad/pcb_plugin.cpp index a088c86de0..35f511aa4e 100644 --- a/pcbnew/plugins/kicad/pcb_plugin.cpp +++ b/pcbnew/plugins/kicad/pcb_plugin.cpp @@ -274,11 +274,19 @@ bool PCB_PLUGIN::CanReadBoard( const wxString& aFileName ) const if( !PLUGIN::CanReadBoard( aFileName ) ) return false; - FILE_LINE_READER reader( aFileName ); + try + { + FILE_LINE_READER reader( aFileName ); + PCB_PARSER parser( &reader, nullptr, m_queryUserCallback ); - PCB_PARSER parser( &reader, nullptr, m_queryUserCallback ); + return parser.IsValidBoardHeader(); + } + catch( const IO_ERROR& ) + { + return false; + } - return parser.IsValidBoardHeader(); + return false; } diff --git a/pcbnew/plugins/legacy/legacy_plugin.cpp b/pcbnew/plugins/legacy/legacy_plugin.cpp index 41a1fde495..38c1117e5f 100644 --- a/pcbnew/plugins/legacy/legacy_plugin.cpp +++ b/pcbnew/plugins/legacy/legacy_plugin.cpp @@ -415,10 +415,9 @@ bool LEGACY_PLUGIN::CanReadBoard( const wxString& aFileName ) const if( !PLUGIN::CanReadBoard( aFileName ) ) return false; - FILE_LINE_READER tempReader( aFileName ); - try { + FILE_LINE_READER tempReader( aFileName ); getVersion( &tempReader ); } catch( const IO_ERROR& ) @@ -435,25 +434,32 @@ bool LEGACY_PLUGIN::CanReadFootprint( const wxString& aFileName ) const if( !PLUGIN::CanReadFootprint( aFileName ) ) return false; - FILE_LINE_READER freader( aFileName ); - WHITESPACE_FILTER_READER reader( freader ); - - reader.ReadLine(); - char* line = reader.Line(); - - if( !line ) - return false; - - if( !strncasecmp( line, FOOTPRINT_LIBRARY_HEADER, FOOTPRINT_LIBRARY_HEADER_CNT ) ) + try { - while( reader.ReadLine() ) + FILE_LINE_READER freader( aFileName ); + WHITESPACE_FILTER_READER reader( freader ); + + reader.ReadLine(); + char* line = reader.Line(); + + if( !line ) + return false; + + if( !strncasecmp( line, FOOTPRINT_LIBRARY_HEADER, FOOTPRINT_LIBRARY_HEADER_CNT ) ) { - if( !strncasecmp( line, "$MODULE", strlen( "$MODULE" ) ) ) + while( reader.ReadLine() ) { - return true; + if( !strncasecmp( line, "$MODULE", strlen( "$MODULE" ) ) ) + { + return true; + } } } } + catch( const IO_ERROR& ) + { + return false; + } return false; }