mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-21 00:21:25 +00:00
Fix OOB access in LSET when opening a PCB file or updating from schematic.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18422
This commit is contained in:
parent
559854ec0f
commit
e2bd76bdce
@ -41,14 +41,15 @@
|
||||
|
||||
|
||||
LSET::LSET( std::initializer_list<PCB_LAYER_ID> aList ) :
|
||||
BASE_SET()
|
||||
LSET()
|
||||
{
|
||||
for( PCB_LAYER_ID layer : aList )
|
||||
set( layer );
|
||||
}
|
||||
|
||||
|
||||
LSET::LSET( const LSEQ& aSeq )
|
||||
LSET::LSET( const LSEQ& aSeq ) :
|
||||
LSET()
|
||||
{
|
||||
for( PCB_LAYER_ID layer : aSeq )
|
||||
set( layer );
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
using iterator = std::vector<int>::iterator;
|
||||
using const_iterator = std::vector<int>::const_iterator;
|
||||
|
||||
BASE_SET( size_t size = 64 ) : m_bits( size, 0 ) {}
|
||||
BASE_SET( size_t size ) : m_bits( size, 0 ) {}
|
||||
|
||||
bool test( size_t pos ) const
|
||||
{
|
||||
@ -173,6 +173,8 @@ public:
|
||||
// Boolean operators
|
||||
BASE_SET& operator&=( const BASE_SET& rhs )
|
||||
{
|
||||
assert( m_bits.size() == rhs.m_bits.size() );
|
||||
|
||||
for( size_t i = 0; i < m_bits.size(); ++i )
|
||||
m_bits[i] &= rhs.m_bits[i];
|
||||
|
||||
@ -181,6 +183,8 @@ public:
|
||||
|
||||
BASE_SET& operator|=( const BASE_SET& rhs )
|
||||
{
|
||||
assert( m_bits.size() == rhs.m_bits.size() );
|
||||
|
||||
for( size_t i = 0; i < m_bits.size(); ++i )
|
||||
m_bits[i] |= rhs.m_bits[i];
|
||||
|
||||
@ -189,6 +193,8 @@ public:
|
||||
|
||||
BASE_SET& operator^=( const BASE_SET& rhs )
|
||||
{
|
||||
assert( m_bits.size() == rhs.m_bits.size() );
|
||||
|
||||
for( size_t i = 0; i < m_bits.size(); ++i )
|
||||
m_bits[i] ^= rhs.m_bits[i];
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
* Create an empty (cleared) set.
|
||||
*/
|
||||
LSET() :
|
||||
BASE_SET(PCB_LAYER_ID_COUNT) // all bits are set to zero in BASE_SET()
|
||||
BASE_SET( PCB_LAYER_ID_COUNT ) // all bits are set to zero in BASE_SET()
|
||||
{
|
||||
}
|
||||
|
||||
@ -59,7 +59,7 @@ public:
|
||||
}
|
||||
|
||||
LSET( PCB_LAYER_ID aLayer ) :
|
||||
BASE_SET(PCB_LAYER_ID_COUNT)
|
||||
BASE_SET( PCB_LAYER_ID_COUNT )
|
||||
{
|
||||
set( aLayer );
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ BOOST_AUTO_TEST_CASE(LSETConstructorEmpty)
|
||||
// Initialize LSET from another BASE_SET
|
||||
BOOST_AUTO_TEST_CASE(LSETConstructorFromBaseSet)
|
||||
{
|
||||
BASE_SET base;
|
||||
BASE_SET base( PCB_LAYER_ID_COUNT );
|
||||
base.set(F_Cu);
|
||||
base.set(In1_Cu);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user