Skip to content

Commit 52d2bbf

Browse files
Harden rclcpp_action::convert(). (#2786) (#2789)
* Harden rclcpp_action::convert(). Signed-off-by: Tomoya Fujita <[email protected]> * update docstring. Signed-off-by: Tomoya Fujita <[email protected]> --------- Signed-off-by: Tomoya Fujita <[email protected]> (cherry picked from commit ce86ef7) Co-authored-by: Tomoya Fujita <[email protected]>
1 parent b6acdc9 commit 52d2bbf

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

rclcpp_action/include/rclcpp_action/types.hpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,22 @@ RCLCPP_ACTION_PUBLIC
3939
std::string
4040
to_string(const GoalUUID & goal_id);
4141

42-
// Convert C++ GoalID to rcl_action_goal_info_t
42+
/// Convert C++ GoalID to rcl_action_goal_info_t
43+
/**
44+
* \param[in] goal_id C++ GoalUUID reference to be converted.
45+
* \param[inout] info rcl_action_goal_info_t structure to be filled.
46+
* \throws std::runtime_error if info is null.
47+
*/
4348
RCLCPP_ACTION_PUBLIC
4449
void
4550
convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info);
4651

47-
// Convert rcl_action_goal_info_t to C++ GoalID
52+
/// Convert rcl_action_goal_info_t to C++ GoalID
53+
/**
54+
* \param[in] info rcl_action_goal_info_t reference to be converted.
55+
* \param[inout] goal_id C++ GoalUUID structure to be filled.
56+
* \throws std::runtime_error if goal_id is null.
57+
*/
4858
RCLCPP_ACTION_PUBLIC
4959
void
5060
convert(const rcl_action_goal_info_t & info, GoalUUID * goal_id);

rclcpp_action/src/types.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ to_string(const GoalUUID & goal_id)
4141
void
4242
convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info)
4343
{
44+
if (info == nullptr) {
45+
throw std::invalid_argument("info is nullptr");
46+
}
4447
for (size_t i = 0; i < UUID_SIZE; ++i) {
4548
info->goal_id.uuid[i] = goal_id[i];
4649
}
@@ -49,6 +52,9 @@ convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info)
4952
void
5053
convert(const rcl_action_goal_info_t & info, GoalUUID * goal_id)
5154
{
55+
if (goal_id == nullptr) {
56+
throw std::invalid_argument("goal_id is nullptr");
57+
}
5258
for (size_t i = 0; i < UUID_SIZE; ++i) {
5359
(*goal_id)[i] = info.goal_id.uuid[i];
5460
}

rclcpp_action/test/test_types.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ TEST(TestActionTypes, goal_uuid_to_rcl_action_goal_info) {
4141
for (uint8_t i = 0; i < UUID_SIZE; ++i) {
4242
goal_id[i] = i;
4343
}
44+
ASSERT_THROW(rclcpp_action::convert(goal_id, nullptr), std::invalid_argument);
4445
rcl_action_goal_info_t goal_info = rcl_action_get_zero_initialized_goal_info();
4546
rclcpp_action::convert(goal_id, &goal_info);
4647
for (uint8_t i = 0; i < UUID_SIZE; ++i) {
@@ -54,6 +55,7 @@ TEST(TestActionTypes, rcl_action_goal_info_to_goal_uuid) {
5455
goal_info.goal_id.uuid[i] = i;
5556
}
5657

58+
ASSERT_THROW(rclcpp_action::convert(goal_info, nullptr), std::invalid_argument);
5759
rclcpp_action::GoalUUID goal_id;
5860
rclcpp_action::convert(goal_info, &goal_id);
5961
for (uint8_t i = 0; i < UUID_SIZE; ++i) {

0 commit comments

Comments
 (0)