Browse Source

Wrap FILE_LINE_READER in try-catch blocks in PCB plugins for CanRead*.

newinvert
Alex Shvartzkop 2 years ago
parent
commit
af62e4276b
  1. 14
      pcbnew/plugins/kicad/pcb_plugin.cpp
  2. 32
      pcbnew/plugins/legacy/legacy_plugin.cpp

14
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;
}

32
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 );
try
{
FILE_LINE_READER freader( aFileName );
WHITESPACE_FILTER_READER reader( freader );
reader.ReadLine();
char* line = reader.Line();
reader.ReadLine();
char* line = reader.Line();
if( !line )
return false;
if( !line )
return false;
if( !strncasecmp( line, FOOTPRINT_LIBRARY_HEADER, FOOTPRINT_LIBRARY_HEADER_CNT ) )
{
while( reader.ReadLine() )
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;
}

Loading…
Cancel
Save