Skip to content

Commit b37b108

Browse files
Catch json exceptions
Signed-off-by: Eugenio Collado <eugeniocollado@eprosima.com>
1 parent 5eeacd2 commit b37b108

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

ddsenabler_participants/src/cpp/Writer.cpp

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,22 @@ void Writer::write_action_feedback_notification(
310310
instanceHandle << msg.instanceHandle;
311311
if (action_feedback_notification_callback_ && prepare_json_data_(msg, dyn_type, json_data))
312312
{
313+
UUID uuid;
314+
try
315+
{
316+
uuid = json_to_uuid(json_data[msg.topic.topic_name()]["data"][instanceHandle.str()]["goal_id"]);
317+
}
318+
catch (const nlohmann::json::exception& e)
319+
{
320+
EPROSIMA_LOG_ERROR(DDSENABLER_WRITER,
321+
"Error parsing UUID from JSON: " << e.what());
322+
return;
323+
}
324+
313325
action_feedback_notification_callback_(
314326
action_name.c_str(),
315327
json_data[msg.topic.topic_name()]["data"][instanceHandle.str()]["feedback"].dump(4).c_str(),
316-
json_to_uuid(json_data[msg.topic.topic_name()]["data"][instanceHandle.str()]["goal_id"]),
328+
uuid,
317329
msg.publish_time.to_ns()
318330
);
319331
}
@@ -442,8 +454,19 @@ void Writer::write_action_cancel_reply_notification(
442454
const auto& goals = json_data[msg.topic.topic_name()]["data"][instanceHandle.str()]["goals_canceling"];
443455
for (const auto& goal : goals)
444456
{
445-
UUID msg_action_id = json_to_uuid(goal["goal_id"]);
446-
if (is_UUID_active_callback_ && !is_UUID_active_callback_(action_name, msg_action_id))
457+
UUID uuid;
458+
try
459+
{
460+
uuid = json_to_uuid(goal["goal_id"]);
461+
}
462+
catch (const nlohmann::json::exception& e)
463+
{
464+
EPROSIMA_LOG_ERROR(DDSENABLER_WRITER,
465+
"Error parsing UUID from JSON: " << e.what());
466+
return;
467+
}
468+
469+
if (is_UUID_active_callback_ && !is_UUID_active_callback_(action_name, uuid))
447470
{
448471
continue;
449472
}
@@ -452,7 +475,7 @@ void Writer::write_action_cancel_reply_notification(
452475
{
453476
action_status_notification_callback_(
454477
action_name.c_str(),
455-
msg_action_id,
478+
uuid,
456479
status_code,
457480
status_message.c_str(),
458481
msg.publish_time.to_ns()
@@ -486,7 +509,18 @@ void Writer::write_action_status_notification(
486509
const auto& list = json_data[msg.topic.topic_name()]["data"][instanceHandle.str()]["status_list"];
487510
for (const auto& status : list)
488511
{
489-
UUID uuid = json_to_uuid(status["goal_info"]["goal_id"]);
512+
UUID uuid;
513+
try
514+
{
515+
uuid = json_to_uuid(status["goal_info"]["goal_id"]);
516+
}
517+
catch (const nlohmann::json::exception& e)
518+
{
519+
EPROSIMA_LOG_ERROR(DDSENABLER_WRITER,
520+
"Error parsing UUID from JSON: " << e.what());
521+
return;
522+
}
523+
490524
if (is_UUID_active_callback_ && !is_UUID_active_callback_(action_name, uuid))
491525
{
492526
continue;

0 commit comments

Comments
 (0)