diff --git a/libs/kimath/src/geometry/shape_line_chain.cpp b/libs/kimath/src/geometry/shape_line_chain.cpp
index 4264a99b9a..adf63ea1a3 100644
--- a/libs/kimath/src/geometry/shape_line_chain.cpp
+++ b/libs/kimath/src/geometry/shape_line_chain.cpp
@@ -108,8 +108,14 @@ SHAPE_LINE_CHAIN::SHAPE_LINE_CHAIN( const Clipper2Lib::Path64&          aPath,
     {
         Append( aPath[ii].x, aPath[ii].y );
 
-        m_shapes[ii].first = loadArc( aZValueBuffer[aPath[ii].z].m_FirstArcIdx );
-        m_shapes[ii].second = loadArc( aZValueBuffer[aPath[ii].z].m_SecondArcIdx );
+        // Add arc info (if exists)
+        int idx_z = aPath[ii].z;
+
+        if( idx_z < 0 || idx_z >= (int)aZValueBuffer.size() )
+            continue;
+
+        m_shapes[ii].first = loadArc( aZValueBuffer[idx_z].m_FirstArcIdx );
+        m_shapes[ii].second = loadArc( aZValueBuffer[idx_z].m_SecondArcIdx );
     }
 
     // Clipper shouldn't return duplicate contiguous points. if it did, these would be