From 52099a5a643da06ee46c9f26b2e595233e9e688b Mon Sep 17 00:00:00 2001 From: Tomoya Kimura Date: Mon, 26 Jun 2023 21:43:18 +0900 Subject: [PATCH] fix(behavior_path_planner): fix invalid access in avoidance module (#4081) Signed-off-by: tomoya.kimura --- .../src/scene_module/avoidance/avoidance_module.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp b/planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp index 8c0d6d4acd48a..91f1c23c3008d 100644 --- a/planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp +++ b/planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp @@ -3045,7 +3045,7 @@ TurnSignalInfo AvoidanceModule::calcTurnSignalInfo(const ShiftedPath & path) con } // compute blinker start idx and end idx - const size_t blinker_start_idx = [&]() { + size_t blinker_start_idx = [&]() { for (size_t idx = start_idx; idx <= end_idx; ++idx) { const double current_shift_length = path.shift_length.at(idx); if (current_shift_length > 0.1) { @@ -3054,7 +3054,13 @@ TurnSignalInfo AvoidanceModule::calcTurnSignalInfo(const ShiftedPath & path) con } return start_idx; }(); - const size_t blinker_end_idx = end_idx; + size_t blinker_end_idx = end_idx; + + // prevent invalid access for out-of-range + blinker_start_idx = + std::min(std::max(std::size_t(0), blinker_start_idx), path.path.points.size() - 1); + blinker_end_idx = + std::min(std::max(blinker_start_idx, blinker_end_idx), path.path.points.size() - 1); const auto blinker_start_pose = path.path.points.at(blinker_start_idx).point.pose; const auto blinker_end_pose = path.path.points.at(blinker_end_idx).point.pose;