summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYana Chernysheva (GitHub) <59469418+ychernysheva@users.noreply.github.com>2020-10-20 16:38:46 +0300
committerGitHub <noreply@github.com>2020-10-20 09:38:46 -0400
commit3ec2b6bbd6c99fd6a624c854d5782c7c73c09ade (patch)
tree1379a3a5ef7a8aceccc7b1903ba92ea48d48d7d4
parent4304cc9c71f6d65688ec0c191b66f5c30ef64ca6 (diff)
downloadsdl_core-3ec2b6bbd6c99fd6a624c854d5782c7c73c09ade.tar.gz
Add check for non-existent parent ID to AddSubMenuRequest (#3534)
* Add check for non-existent parent ID to AddSubMenuRequest * fixup! Add check for non-existent parent ID to AddSubMenuRequest
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc16
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc25
2 files changed, 38 insertions, 3 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
index c83538c023..e2a37f17bd 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
@@ -96,14 +96,24 @@ void AddSubMenuRequest::Run() {
return;
}
- const std::string& menu_name =
- received_msg_params[strings::menu_name].asString();
-
const uint32_t parent_id =
received_msg_params.keyExists(strings::parent_id)
? received_msg_params[strings::parent_id].asUInt()
: 0;
+ if (0 != parent_id) {
+ smart_objects::SmartObject parent = app->FindSubMenu(parent_id);
+ if (smart_objects::SmartType_Null == parent.getType()) {
+ SDL_LOG_ERROR("Parent ID " << parent_id << " doesn't exist");
+ SendResponse(
+ false, mobile_apis::Result::INVALID_ID, "Parent ID doesn't exist");
+ return;
+ }
+ }
+
+ const std::string& menu_name =
+ received_msg_params[strings::menu_name].asString();
+
if (app->IsSubMenuNameAlreadyExist(menu_name, parent_id)) {
SDL_LOG_ERROR("Menu name " << menu_name << " is duplicated.");
SendResponse(false, mobile_apis::Result::DUPLICATE_NAME);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
index a88a1ade69..23e4418726 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
@@ -104,6 +104,31 @@ TEST_F(AddSubMenuRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) {
request_ptr->Run();
}
+TEST_F(AddSubMenuRequestTest, Run_NonExistentParentID_EXPECT_INVALID_ID) {
+ const uint32_t menu_id = 10;
+ const uint32_t parent_id = 4;
+ MessageSharedPtr msg = CreateMsgParams();
+ SmartObject& msg_params = (*msg)[am::strings::msg_params];
+
+ msg_params[am::strings::menu_id] = menu_id;
+ msg_params[am::strings::menu_name] = "test";
+ msg_params[am::strings::parent_id] = parent_id;
+
+ SmartObject sub_menu(smart_objects::SmartType_Null);
+ EXPECT_CALL(*mock_app, FindSubMenu(menu_id)).WillOnce(Return(sub_menu));
+
+ SmartObject parent(smart_objects::SmartType_Null);
+ EXPECT_CALL(*mock_app, FindSubMenu(parent_id)).WillOnce(Return(parent));
+
+ EXPECT_CALL(mock_rpc_service_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_ID), _));
+ std::shared_ptr<AddSubMenuRequest> request_ptr =
+ CreateCommand<AddSubMenuRequest>(msg);
+
+ request_ptr->Run();
+}
+
TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) {
const uint32_t menu_id = 10u;
MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);