diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index bb0908908c..1c99d1d583 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -813,7 +813,14 @@ MavlinkMissionManager::parse_mavlink_mission_item(const mavlink_mission_item_t * mission_item->yaw = _wrap_pi(mavlink_mission_item->param4 * M_DEG_TO_RAD_F); mission_item->loiter_radius = fabsf(mavlink_mission_item->param3); mission_item->loiter_direction = (mavlink_mission_item->param3 > 0) ? 1 : -1; /* 1 if positive CW, -1 if negative CCW */ - mission_item->nav_cmd = (NAV_CMD)mavlink_mission_item->command; + + /* unsigned, so can't be negative, only check for overflow */ + if (mavlink_mission_item->command >= NAV_CMD_INVALID) { + mission_item->nav_cmd = NAV_CMD_INVALID; + + } else { + mission_item->nav_cmd = (NAV_CMD)mavlink_mission_item->command; + } mission_item->autocontinue = mavlink_mission_item->autocontinue; // mission_item->index = mavlink_mission_item->seq; diff --git a/src/modules/navigator/navigation.h b/src/modules/navigator/navigation.h index b0fabc08f5..89f77b4752 100644 --- a/src/modules/navigator/navigation.h +++ b/src/modules/navigator/navigation.h @@ -63,8 +63,8 @@ enum NAV_CMD { NAV_CMD_PATHPLANNING = 81, NAV_CMD_DO_JUMP = 177, NAV_CMD_DO_SET_SERVO=183, - NAV_CMD_DO_REPEAT_SERVO=184 - + NAV_CMD_DO_REPEAT_SERVO=184, + NAV_CMD_INVALID=UINT16_MAX /* ensure that casting a large number results in a specific error */ }; enum ORIGIN {