From 99df15a5fff7fd6ac0f64b781d34cb2b2a4bc706 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 22 Jul 2023 18:14:14 +0200 Subject: [PATCH] Update on issue 1422 fix - fixing an array index out of bounds issue; do no use control points for first and last point as splines may not be designed to terminate at those. --- src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc | 10 +++++----- .../streamers/dxf/unit_tests/dbDXFReaderTests.cc | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc index 2f5bacb89..54a6c0e28 100644 --- a/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc +++ b/src/plugins/streamers/dxf/db_plugin/dbDXFReader.cc @@ -817,12 +817,12 @@ static db::DPoint b_spline_point (double x, const std::vector > &control_points, int p, const std::vector &t, int &k) { k = (int) (std::lower_bound (t.begin (), t.end (), x - 1e-6) - t.begin ()); - if (k < p) { - return control_points.front ().first; - } else if (k > (int) control_points.size ()) { - return control_points.back ().first; - } --k; + if (k < p) { + k = p; + } else if (k >= (int) control_points.size ()) { + k = (int) control_points.size () - 1; + } std::vector d; std::vector dw; diff --git a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc index a9e7d9c7b..265e4bdff 100644 --- a/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc +++ b/src/plugins/streamers/dxf/unit_tests/dbDXFReaderTests.cc @@ -517,10 +517,22 @@ TEST(34) } // issue #1422 -TEST(35) +TEST(35a) { db::DXFReaderOptions opt; run_test_public (_this, "issue_1422a.dxf", "issue_1422a_au.gds.gz", opt); +} + +// issue #1422 +TEST(35b) +{ + db::DXFReaderOptions opt; run_test_public (_this, "issue_1422b.dxf", "issue_1422b_au.gds.gz", opt); +} + +// issue #1422 +TEST(35c) +{ + db::DXFReaderOptions opt; run_test_public (_this, "issue_1422c.dxf", "issue_1422c_au.gds.gz", opt); }