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_removeUnconnectedLayer = false;
|
||||||
m_keepTopBottomLayer = true;
|
m_keepTopBottomLayer = true;
|
||||||
|
|
||||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#define PAD_H
|
#define PAD_H
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <array>
|
||||||
#include <zones.h>
|
#include <zones.h>
|
||||||
#include <board_connected_item.h>
|
#include <board_connected_item.h>
|
||||||
#include <geometry/shape_poly_set.h>
|
#include <geometry/shape_poly_set.h>
|
||||||
|
@ -741,8 +742,7 @@ public:
|
||||||
|
|
||||||
void ClearZoneLayerOverrides()
|
void ClearZoneLayerOverrides()
|
||||||
{
|
{
|
||||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ZONE_LAYER_OVERRIDE& GetZoneLayerOverride( PCB_LAYER_ID aLayer ) const
|
const ZONE_LAYER_OVERRIDE& GetZoneLayerOverride( PCB_LAYER_ID aLayer ) const
|
||||||
|
@ -875,7 +875,7 @@ private:
|
||||||
int m_thermalGap;
|
int m_thermalGap;
|
||||||
|
|
||||||
std::mutex m_zoneLayerOverridesMutex;
|
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
|
#endif // PAD_H
|
||||||
|
|
|
@ -89,8 +89,7 @@ PCB_VIA::PCB_VIA( BOARD_ITEM* aParent ) :
|
||||||
m_removeUnconnectedLayer = false;
|
m_removeUnconnectedLayer = false;
|
||||||
m_keepStartEndLayer = true;
|
m_keepStartEndLayer = true;
|
||||||
|
|
||||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
|
||||||
|
|
||||||
m_isFree = false;
|
m_isFree = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <array>
|
||||||
#include <board_connected_item.h>
|
#include <board_connected_item.h>
|
||||||
#include <base_units.h>
|
#include <base_units.h>
|
||||||
#include <geometry/shape_segment.h>
|
#include <geometry/shape_segment.h>
|
||||||
|
@ -555,8 +556,7 @@ public:
|
||||||
|
|
||||||
void ClearZoneLayerOverrides()
|
void ClearZoneLayerOverrides()
|
||||||
{
|
{
|
||||||
for( size_t ii = 0; ii < arrayDim( m_zoneLayerOverrides ); ++ii )
|
m_zoneLayerOverrides.fill( ZLO_NONE );
|
||||||
m_zoneLayerOverrides[ ii ] = ZLO_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ZONE_LAYER_OVERRIDE& GetZoneLayerOverride( PCB_LAYER_ID aLayer ) const
|
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
|
bool m_isFree; ///< "Free" vias don't get their nets auto-updated
|
||||||
|
|
||||||
std::mutex m_zoneLayerOverridesMutex;
|
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.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 CERN
|
* 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
|
* 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
|
||||||
|
@ -5025,7 +5025,10 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_zone_layer_connections:
|
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 );
|
pad->SetZoneLayerOverride( layer, ZLO_FORCE_NO_ZONE_CONNECTION );
|
||||||
|
|
||||||
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
|
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
|
||||||
|
@ -5039,6 +5042,7 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Continue to process "(locked)" format which was output during 5.99 development
|
// Continue to process "(locked)" format which was output during 5.99 development
|
||||||
case T_locked:
|
case T_locked:
|
||||||
|
|
Loading…
Reference in New Issue