From 69ee94f289bce0d03563e89cd25735fa7ff6edcd Mon Sep 17 00:00:00 2001 From: Alex Shvartzkop Date: Sun, 23 Jun 2024 07:02:43 +0300 Subject: [PATCH] Fix crash when trying to draw a schematic polygon with no segments. Fixes https://gitlab.com/kicad/code/kicad/-/issues/18246 --- eeschema/sch_painter.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp index 5caa119d54..7759513cf4 100644 --- a/eeschema/sch_painter.cpp +++ b/eeschema/sch_painter.cpp @@ -1491,17 +1491,22 @@ void SCH_PAINTER::draw( const SCH_SHAPE* aShape, int aLayer, bool aDimmed ) case SHAPE_T::POLY: { const std::vector polySegments = shape->MakeEffectiveShapes( true ); - std::deque pts; - for( SHAPE* polySegment : polySegments ) - pts.push_back( static_cast( polySegment )->GetSeg().A ); + if( !polySegments.empty() ) + { + std::deque pts; - pts.push_back( static_cast( polySegments.back() )->GetSeg().B ); + for( SHAPE* polySegment : polySegments ) + pts.push_back( static_cast( polySegment )->GetSeg().A ); - for( SHAPE* polySegment : polySegments ) - delete polySegment; + pts.push_back( + static_cast( polySegments.back() )->GetSeg().B ); - m_gal->DrawPolygon( pts ); + for( SHAPE* polySegment : polySegments ) + delete polySegment; + + m_gal->DrawPolygon( pts ); + } break; } @@ -2675,7 +2680,7 @@ void SCH_PAINTER::draw( const SCH_SHEET* aSheet, int aLayer ) { bool drawingShadows = aLayer == LAYER_SELECTION_SHADOWS; bool DNP = aSheet->GetDNP(); - bool markExclusion = eeconfig()->m_Appearance.mark_sim_exclusions + bool markExclusion = eeconfig()->m_Appearance.mark_sim_exclusions && aSheet->GetExcludedFromSim(); if( m_schSettings.IsPrinting() && drawingShadows )