From 73fc3e366825abb1073dc90781bb9cff5f3cb3d7 Mon Sep 17 00:00:00 2001 From: Peter Albrecht <albrecpe@gmail.com> Date: Thu, 21 Dec 2023 15:25:38 +0100 Subject: [PATCH] fix: undefined behaviour if shown description was not included in search --- .../skill_details/SkillDetailsGroupBox.cpp | 13 ++++++++++--- .../skill_details/SkillDetailsTreeWidget.cpp | 12 +++++++++--- .../skill_details/SkillDetailsTreeWidget.h | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp index fdba9547e..bae1d2799 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp @@ -31,9 +31,16 @@ namespace armarx::skills::gui // construct skill id (with guaranteed valid provider) skills::SkillID skillId = {provider_opt, _skillId.skillName}; - // We assert that the skill exists - ARMARX_CHECK(skills.count(skillId.providerId.value()) > 0); - ARMARX_CHECK(skills.at(skillId.providerId.value()).count(skillId) > 0); + + // Maybe the search doesn't include the shown skill? + if (skills.count(skillId.providerId.value()) == 0 || + skills.at(skillId.providerId.value()).count(skillId) == 0) + { + // reset details widget + skillDetailsTreeWidget->resetWidget(); + return; + } + // get skill description skills::SkillDescription descr = skills.at(skillId.providerId.value()).at(skillId); diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp index ad95bf151..8d8eaaee2 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp @@ -34,9 +34,7 @@ namespace armarx::skills::gui // dont touch the widget if the skill id didn't change if (shownSkill.has_value() && skillId == shownSkill.value().skillId) return; - this->clear(); - aronTreeWidgetController = nullptr; - skillsArgumentsTreeWidgetItem = nullptr; + this->resetWidget(); { auto it = new QTreeWidgetItem( @@ -154,5 +152,13 @@ namespace armarx::skills::gui aronTreeWidgetController->setFromAron(data); } + void + SkillDetailsTreeWidget::resetWidget() + { + this->clear(); + aronTreeWidgetController = nullptr; + skillsArgumentsTreeWidgetItem = nullptr; + } + } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h index f6116a938..1617de1f7 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h @@ -24,6 +24,8 @@ namespace armarx::skills::gui void pasteCurrentConfig(); void resetCurrentConfig(); + void resetWidget(); + public slots: void disconnectGui(); void updateGui(); -- GitLab