From e42c66bd0e8f9d79cadf6ad4200940082f183427 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 3 May 2023 17:18:28 +0200 Subject: [PATCH] Pcbnew: fix crash when loading a file having vias on connected layers only. It was due to an access out of bounds in a std::array Fixes #14668 https://gitlab.com/kicad/code/kicad/issues/14668 --- pcbnew/plugins/kicad/pcb_parser.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp index 4e074c0aba..9d3a70971c 100644 --- a/pcbnew/plugins/kicad/pcb_parser.cpp +++ b/pcbnew/plugins/kicad/pcb_parser.cpp @@ -5475,7 +5475,11 @@ PCB_VIA* PCB_PARSER::parsePCB_VIA() break; case T_zone_layer_connections: - for( PCB_LAYER_ID layer : via->GetLayerSet().Seq() ) + { + // Ensure only copper layers are stored int ZoneLayerOverride array + LSET cuLayers = via->GetLayerSet() & LSET::AllCuMask(); + + for( PCB_LAYER_ID layer : cuLayers.Seq() ) via->SetZoneLayerOverride( layer, ZLO_FORCE_NO_ZONE_CONNECTION ); for( token = NextTok(); token != T_RIGHT; token = NextTok() ) @@ -5487,7 +5491,7 @@ PCB_VIA* PCB_PARSER::parsePCB_VIA() via->SetZoneLayerOverride( layer, ZLO_FORCE_FLASHED ); } - + } break; case T_tstamp: