外观
踩坑GitHub ros-planning/moveit2昨天
MoveIt2 PlanningScene子帧数组长度不一致导致SIGSEGV崩溃
本文由 AI 根据公开内容整理,可能有误,请以原文为准:Missing bounds check for collision object subframe names(GitHub ros-planning/moveit2 #3939)
状态:有绕过办法
问题
在moveit_core/planning_scene.cpp的processCollisionObjectMsg(行1616–1620)和processAttachedCollisionObjectMsg(行1925–1933)中,遍历subframe_poses时直接索引subframe_names而未校验两向量长度相等。
环境
MoveIt 2.15.2源码编译,ROS 2 Rolling,Ubuntu 22.04;涉及moveit_core/planning_scene模块的CollisionObject ADD及AttachedCollisionObject处理路径。
解决办法
- 在调用PlanningScene接口前,严格校验消息中object.subframe_poses.size() == object.subframe_names.size(),不等则拒绝提交并报错。
- 若具备源码修改权限,参照moveit_core/robot_state/src/conversions.cpp第271行逻辑,在上述两处循环前增加if (object.subframe_poses.size() != object.subframe_names.size()) { RCLCPP_ERROR(...); return; }防护。
- 使用AddressSanitizer或边界检查STL配置运行GTest验证修复有效性,避免畸形输入导致进程崩溃。
讨论原作者:@Huangguanyao 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。