Don't write outside of overrides array on pad zone_layer_connections.
Use std::array to catch future errors in Debug. Fixes https://gitlab.com/kicad/code/kicad/issues/13803
This commit is contained in:
parent
3d23d0e16a
commit
b71fa91bc4
|
@ -105,8 +105,7 @@ PAD::PAD( FOOTPRINT* parent ) :
|
|||
m_removeUnconnectedLayer = false;
|
||||
m_keepTopBottomLayer = true;
|
||||
|
||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
||||
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#define PAD_H
|
||||
|
||||
#include <mutex>
|
||||
#include <array>
|
||||
#include <zones.h>
|
||||
#include <board_connected_item.h>
|
||||
#include <geometry/shape_poly_set.h>
|
||||
|
@ -741,8 +742,7 @@ public:
|
|||
|
||||
void ClearZoneLayerOverrides()
|
||||
{
|
||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
||||
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||
}
|
||||
|
||||
const ZONE_LAYER_OVERRIDE& GetZoneLayerOverride( PCB_LAYER_ID aLayer ) const
|
||||
|
@ -875,7 +875,7 @@ private:
|
|||
int m_thermalGap;
|
||||
|
||||
std::mutex m_zoneLayerOverridesMutex;
|
||||
ZONE_LAYER_OVERRIDE m_zoneLayerOverrides[B_Cu + 1];
|
||||
std::array<ZONE_LAYER_OVERRIDE, MAX_CU_LAYERS> m_zoneLayerOverrides;
|
||||
};
|
||||
|
||||
#endif // PAD_H
|
||||
|
|
|
@ -89,8 +89,7 @@ PCB_VIA::PCB_VIA( BOARD_ITEM* aParent ) :
|
|||
m_removeUnconnectedLayer = false;
|
||||
m_keepStartEndLayer = true;
|
||||
|
||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
||||
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||
|
||||
m_isFree = false;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
|
||||
|
||||
#include <mutex>
|
||||
#include <array>
|
||||
#include <board_connected_item.h>
|
||||
#include <base_units.h>
|
||||
#include <geometry/shape_segment.h>
|
||||
|
@ -555,8 +556,7 @@ public:
|
|||
|
||||
void ClearZoneLayerOverrides()
|
||||
{
|
||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
||||
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||
}
|
||||
|
||||
const ZONE_LAYER_OVERRIDE& GetZoneLayerOverride( PCB_LAYER_ID aLayer ) const
|
||||
|
@ -588,7 +588,7 @@ private:
|
|||
bool m_isFree; ///< "Free" vias don't get their nets auto-updated
|
||||
|
||||
std::mutex m_zoneLayerOverridesMutex;
|
||||
ZONE_LAYER_OVERRIDE m_zoneLayerOverrides[B_Cu + 1];
|
||||
std::array<ZONE_LAYER_OVERRIDE, MAX_CU_LAYERS> m_zoneLayerOverrides;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 CERN
|
||||
* Copyright (C) 2012-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2012-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -5025,7 +5025,10 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
|
|||
break;
|
||||
|
||||
case T_zone_layer_connections:
|
||||
for( PCB_LAYER_ID layer : pad->GetLayerSet().Seq() )
|
||||
{
|
||||
LSET cuLayers = pad->GetLayerSet() & LSET::AllCuMask();
|
||||
|
||||
for( PCB_LAYER_ID layer : cuLayers.Seq() )
|
||||
pad->SetZoneLayerOverride( layer, ZLO_FORCE_NO_ZONE_CONNECTION );
|
||||
|
||||
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
|
||||
|
@ -5039,6 +5042,7 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
|
|||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Continue to process "(locked)" format which was output during 5.99 development
|
||||
case T_locked:
|
||||
|
|
Loading…
Reference in New Issue