From 983f509279d9e213d21e2c709e9e2a2839b5a94c Mon Sep 17 00:00:00 2001 From: Sam Yates <halfflat@gmail.com> Date: Mon, 3 May 2021 15:34:28 +0200 Subject: [PATCH] Fix communicator source gid bounds check. (#1513) * Correct bounds check order in communicator. * Use `.at()` in test recipe to catch failures in bound checking. --- arbor/communication/communicator.cpp | 3 +-- test/unit/test_recipe.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/arbor/communication/communicator.cpp b/arbor/communication/communicator.cpp index b93638f8..16b08fb5 100644 --- a/arbor/communication/communicator.cpp +++ b/arbor/communication/communicator.cpp @@ -80,11 +80,10 @@ communicator::communicator(const recipe& rec, for (const auto& cell: gid_infos) { auto num_targets = rec.num_targets(cell.gid); for (auto c: cell.conns) { - auto num_sources = rec.num_sources(c.source.gid); if (c.source.gid >= num_total_cells) { throw arb::bad_connection_source_gid(cell.gid, c.source.gid, num_total_cells); } - if (c.source.index >= num_sources) { + if (auto num_sources = rec.num_sources(c.source.gid); c.source.index >= num_sources) { throw arb::bad_connection_source_lid(cell.gid, c.source.index, num_sources); } if (c.dest >= num_targets) { diff --git a/test/unit/test_recipe.cpp b/test/unit/test_recipe.cpp index b1b0c04e..cda30fb9 100644 --- a/test/unit/test_recipe.cpp +++ b/test/unit/test_recipe.cpp @@ -40,25 +40,25 @@ namespace { return num_cells_; } arb::util::unique_any get_cell_description(cell_gid_type gid) const override { - return cells_[gid]; + return cells_.at(gid); } cell_kind get_cell_kind(cell_gid_type gid) const override { return cell_kind::cable; } std::vector<gap_junction_connection> gap_junctions_on(cell_gid_type gid) const override { - return gap_junctions_[gid]; + return gap_junctions_.at(gid); } std::vector<cell_connection> connections_on(cell_gid_type gid) const override { - return connections_[gid]; + return connections_.at(gid); } cell_size_type num_sources(cell_gid_type gid) const override { - return num_sources_[gid]; + return num_sources_.at(gid); } cell_size_type num_targets(cell_gid_type gid) const override { - return num_targets_[gid]; + return num_targets_.at(gid); } std::vector<arb::event_generator> event_generators(cell_gid_type gid) const override { - return event_generators_[gid]; + return event_generators_.at(gid); } std::any get_global_properties(cell_kind) const override { arb::cable_cell_global_properties a; -- GitLab