Coverity fixes: 280374, 313611, 313648, 313649, and 314720.

This commit is contained in:
Wayne Stambaugh 2020-12-11 13:29:52 -05:00
parent 0ef63aca47
commit dd4298bb94
5 changed files with 39 additions and 23 deletions

View File

@ -53,6 +53,7 @@ EE_GRID_HELPER::EE_GRID_HELPER( TOOL_MANAGER* aToolMgr ) :
{ {
m_enableSnap = true; m_enableSnap = true;
m_enableSnapLine = true; m_enableSnapLine = true;
m_enableGrid = true;
m_snapItem = nullptr; m_snapItem = nullptr;
KIGFX::VIEW* view = m_toolMgr->GetView(); KIGFX::VIEW* view = m_toolMgr->GetView();

View File

@ -43,8 +43,8 @@
- DRCE_TOO_MANY_VIAS - DRCE_TOO_MANY_VIAS
Todo: Todo:
- arc support. - arc support.
- improve recognition of coupled segments (now anything that's parallel is considered coupled, causing - improve recognition of coupled segments (now anything that's parallel is considered
DRC errors on meanders) coupled, causing DRC errors on meanders)
*/ */
namespace test { namespace test {
@ -169,7 +169,10 @@ struct DIFF_PAIR_COUPLED_SEGMENTS
DIFF_PAIR_COUPLED_SEGMENTS() : DIFF_PAIR_COUPLED_SEGMENTS() :
parentN( nullptr ), parentN( nullptr ),
parentP( nullptr ) parentP( nullptr ),
computedGap( 0 ),
layer( UNDEFINED_LAYER ),
couplingOK( false )
{} {}
}; };
@ -349,7 +352,8 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
wxString nameP = niP->GetNetname(); wxString nameP = niP->GetNetname();
wxString nameN = niN->GetNetname(); wxString nameN = niN->GetNetname();
reportAux( wxString::Format( "Rule '%s', DP: (+) %s - (-) %s", it.first.parentRule->m_Name, nameP, nameN ) ); reportAux( wxString::Format( "Rule '%s', DP: (+) %s - (-) %s",
it.first.parentRule->m_Name, nameP, nameN ) );
extractDiffPairCoupledItems( it.second, copperTree ); extractDiffPairCoupledItems( it.second, copperTree );
@ -359,8 +363,10 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
drc_dbg(10, " coupled prims : %d\n", (int) it.second.coupled.size() ); drc_dbg(10, " coupled prims : %d\n", (int) it.second.coupled.size() );
OPT<DRC_CONSTRAINT> gapConstraint = it.first.parentRule->FindConstraint( DIFF_PAIR_GAP_CONSTRAINT ); OPT<DRC_CONSTRAINT> gapConstraint =
OPT<DRC_CONSTRAINT> maxUncoupledConstraint = it.first.parentRule->FindConstraint( DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT ); it.first.parentRule->FindConstraint( DIFF_PAIR_GAP_CONSTRAINT );
OPT<DRC_CONSTRAINT> maxUncoupledConstraint =
it.first.parentRule->FindConstraint( DIFF_PAIR_MAX_UNCOUPLED_CONSTRAINT );
for( auto& item : it.second.itemsN ) for( auto& item : it.second.itemsN )
{ {
@ -401,7 +407,8 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
overlay->Line( cpair.coupledN ); overlay->Line( cpair.coupledN );
} }
drc_dbg(10, " len %d gap %d l %d\n", length, gap, cpair.parentP->GetLayer() ); drc_dbg( 10, " len %d gap %d l %d\n", length, gap,
cpair.parentP->GetLayer() );
if( gapConstraint ) if( gapConstraint )
{ {
@ -412,7 +419,6 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
if ( val.HasMax() && gap > val.Max() ) if ( val.HasMax() && gap > val.Max() )
insideRange = false; insideRange = false;
// if(val.HasMin() && val.HasMax() ) // if(val.HasMin() && val.HasMax() )
// drc_dbg(10, "Vmin %d vmax %d\n", val.Min(), val.Max() ); // drc_dbg(10, "Vmin %d vmax %d\n", val.Min(), val.Max() );
@ -424,10 +430,10 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
} }
int totalLen = std::max( it.second.totalLengthN, it.second.totalLengthP ); int totalLen = std::max( it.second.totalLengthN, it.second.totalLengthP );
reportAux( wxString::Format( " - coupled length: %s, total length: %s", reportAux( wxString::Format( " - coupled length: %s, total length: %s",
MessageTextFromValue( userUnits(), it.second.totalCoupled ), MessageTextFromValue( userUnits(), it.second.totalCoupled ),
MessageTextFromValue( userUnits(), totalLen ) ) ); MessageTextFromValue( userUnits(), totalLen ) ) );
int totalUncoupled = totalLen - it.second.totalCoupled; int totalUncoupled = totalLen - it.second.totalCoupled;
@ -471,16 +477,16 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
auto val = gapConstraint->GetValue(); auto val = gapConstraint->GetValue();
auto drcItem = DRC_ITEM::Create( DRCE_DIFF_PAIR_GAP_OUT_OF_RANGE ); auto drcItem = DRC_ITEM::Create( DRCE_DIFF_PAIR_GAP_OUT_OF_RANGE );
m_msg = drcItem->GetErrorText() + " (" + gapConstraint->GetParentRule()->m_Name + " "; m_msg = drcItem->GetErrorText() + " (" +
gapConstraint->GetParentRule()->m_Name + " ";
if( val.HasMin() ) if( val.HasMin() )
m_msg += wxString::Format( _( "minimum gap: %s; " ), m_msg += wxString::Format( _( "minimum gap: %s; " ),
MessageTextFromValue( userUnits(), val.Min() ) ); MessageTextFromValue( userUnits(), val.Min() ) );
if( val.HasMax() ) if( val.HasMax() )
m_msg += wxString::Format( _( "maximum gap: %s; " ), m_msg += wxString::Format( _( "maximum gap: %s; " ),
MessageTextFromValue( userUnits(), val.Max() ) ); MessageTextFromValue( userUnits(), val.Max() ) );
m_msg += wxString::Format( _( "actual: %s)" ), m_msg += wxString::Format( _( "actual: %s)" ),
MessageTextFromValue( userUnits(), cpair.computedGap ) ); MessageTextFromValue( userUnits(), cpair.computedGap ) );

View File

@ -116,7 +116,8 @@ static const TOOL_ACTION ACT_PlaceMicroVia( "pcbnew.InteractiveRouter.PlaceMicro
_( "Place Microvia" ), _( "Adds a microvia at the end of currently routed track." ), _( "Place Microvia" ), _( "Adds a microvia at the end of currently routed track." ),
via_microvia_xpm, AF_NONE, (void*) VIA_ACTION_FLAGS::MICROVIA ); via_microvia_xpm, AF_NONE, (void*) VIA_ACTION_FLAGS::MICROVIA );
static const TOOL_ACTION ACT_SelLayerAndPlaceThroughVia( "pcbnew.InteractiveRouter.SelLayerAndPlaceVia", static const TOOL_ACTION ACT_SelLayerAndPlaceThroughVia(
"pcbnew.InteractiveRouter.SelLayerAndPlaceVia",
AS_CONTEXT, AS_CONTEXT,
'<', LEGACY_HK_NAME( "Select Layer and Add Through Via" ), '<', LEGACY_HK_NAME( "Select Layer and Add Through Via" ),
_( "Select Layer and Place Through Via..." ), _( "Select Layer and Place Through Via..." ),
@ -124,7 +125,8 @@ static const TOOL_ACTION ACT_SelLayerAndPlaceThroughVia( "pcbnew.InteractiveRout
select_w_layer_xpm, AF_NONE, select_w_layer_xpm, AF_NONE,
(void*) ( VIA_ACTION_FLAGS::VIA | VIA_ACTION_FLAGS::SELECT_LAYER ) ); (void*) ( VIA_ACTION_FLAGS::VIA | VIA_ACTION_FLAGS::SELECT_LAYER ) );
static const TOOL_ACTION ACT_SelLayerAndPlaceBlindVia( "pcbnew.InteractiveRouter.SelLayerAndPlaceBlindVia", static const TOOL_ACTION ACT_SelLayerAndPlaceBlindVia(
"pcbnew.InteractiveRouter.SelLayerAndPlaceBlindVia",
AS_CONTEXT, AS_CONTEXT,
MD_ALT + '<', LEGACY_HK_NAME( "Select Layer and Add Blind/Buried Via" ), MD_ALT + '<', LEGACY_HK_NAME( "Select Layer and Add Blind/Buried Via" ),
_( "Select Layer and Place Blind/Buried Via..." ), _( "Select Layer and Place Blind/Buried Via..." ),
@ -488,6 +490,7 @@ void ROUTER_TOOL::handleCommonEvents( const TOOL_EVENT& aEvent )
case '0': case '0':
{ {
auto logger = m_router->Logger(); auto logger = m_router->Logger();
if( ! logger ) if( ! logger )
return; return;
@ -502,17 +505,18 @@ void ROUTER_TOOL::handleCommonEvents( const TOOL_EVENT& aEvent )
if( evt.item && evt.item->Parent() ) if( evt.item && evt.item->Parent() )
id = evt.item->Parent()->m_Uuid.AsString(); id = evt.item->Parent()->m_Uuid.AsString();
fprintf(f, "event %d %d %d %s\n", evt.p.x, evt.p.y, evt.type, (const char*) id.c_str() ); fprintf( f, "event %d %d %d %s\n", evt.p.x, evt.p.y, evt.type,
(const char*) id.c_str() );
} }
fclose(f); fclose( f );
// Export as *.kicad_pcb format, using a strategy which is specifically chosen // Export as *.kicad_pcb format, using a strategy which is specifically chosen
// as an example on how it could also be used to send it to the system clipboard. // as an example on how it could also be used to send it to the system clipboard.
PCB_IO pcb_io; PCB_IO pcb_io;
pcb_io.Save("/tmp/pns.dump", m_iface->GetBoard(), nullptr ); pcb_io.Save( "/tmp/pns.dump", m_iface->GetBoard(), nullptr );
break; break;
} }
@ -662,6 +666,8 @@ int ROUTER_TOOL::onViaCommand( const TOOL_EVENT& aEvent )
int ROUTER_TOOL::handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia ) int ROUTER_TOOL::handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia )
{ {
wxCHECK( m_router, 0 );
if( !IsToolActive() ) if( !IsToolActive() )
return 0; return 0;
@ -747,7 +753,7 @@ int ROUTER_TOOL::handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia )
targetLayer = frame()->SelectLayer( static_cast<PCB_LAYER_ID>( currentLayer ), targetLayer = frame()->SelectLayer( static_cast<PCB_LAYER_ID>( currentLayer ),
LSET::AllNonCuMask(), dlgPosition ); LSET::AllNonCuMask(), dlgPosition );
// Reset the cursor to the position where the event occured // Reset the cursor to the position where the event occurred
controls()->SetCursorPosition( aEvent.HasPosition() ? aEvent.Position() : dlgPosition ); controls()->SetCursorPosition( aEvent.HasPosition() ? aEvent.Position() : dlgPosition );
} }
} }
@ -1010,7 +1016,7 @@ void ROUTER_TOOL::performRouting()
{ {
setCursor(); setCursor();
// Don't crash if we missed an operation that cancelled routing. // Don't crash if we missed an operation that canceled routing.
if( !m_router->RoutingInProgress() ) if( !m_router->RoutingInProgress() )
{ {
if( evt->IsCancelInteractive() ) if( evt->IsCancelInteractive() )

View File

@ -692,6 +692,8 @@ int EDIT_TOOL::ChangeTrackWidth( const TOOL_EVENT& aEvent )
{ {
TRACK* track = dynamic_cast<TRACK*>( item ); TRACK* track = dynamic_cast<TRACK*>( item );
wxCHECK( track, 0 );
m_commit->Modify( track ); m_commit->Modify( track );
int new_width = board()->GetDesignSettings().GetCurrentTrackWidth(); int new_width = board()->GetDesignSettings().GetCurrentTrackWidth();

View File

@ -2,6 +2,7 @@
* This program source code file is part kicad2mcad * This program source code file is part kicad2mcad
* *
* Copyright (C) 2015-2016 Cirilo Bernardo <cirilo.bernardo@gmail.com> * Copyright (C) 2015-2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -1069,7 +1070,7 @@ static bool getHollerith( const std::string& aString, size_t& aIndex, wxString&
i2 += nchars; i2 += nchars;
} }
if( aString[i2] != '"' ) if( i2 >= aString.size() || aString[i2] != '"' )
{ {
std::ostringstream ostr; std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";