diff --git a/services/sandbox_manager/main/cpp/src/sensitive/sandbox_manager_event_subscriber.cpp b/services/sandbox_manager/main/cpp/src/sensitive/sandbox_manager_event_subscriber.cpp index 8552231e23fe0b7c4b2fec86c95c31cb56e8b408..0716623b4b86d4f58412729522afe724e002dedc 100644 --- a/services/sandbox_manager/main/cpp/src/sensitive/sandbox_manager_event_subscriber.cpp +++ b/services/sandbox_manager/main/cpp/src/sensitive/sandbox_manager_event_subscriber.cpp @@ -91,6 +91,10 @@ void SandboxManagerCommonEventSubscriber::OnReceiveEvent(const EventFwk::CommonE if (action == EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_CHANGED) { std::string bundleName = want.GetElement().GetBundleName(); int32_t userID = want.GetParams().GetIntParam("userId", -1); + if ((userID == -1) || (bundleName.empty())) { + SANDBOXMANAGER_LOG_ERROR(LABEL, "On ReceivePackage changed failed by error input."); + return; + } SANDBOXMANAGER_LOG_INFO(LABEL, "OnReceive Package changed %{public}s, %{public}d", bundleName.c_str(), userID); (void)PolicyInfoManager::GetInstance().CleanPolicyByPackageChanged(bundleName, userID); } diff --git a/services/sandbox_manager/main/cpp/src/service/sandbox_manager_service.cpp b/services/sandbox_manager/main/cpp/src/service/sandbox_manager_service.cpp index 12d36a262fa1a1ec63adee23bc2697fd344c0b1c..f08e6429cbe5fa8604a183f252dfe23b6ed0ec8c 100644 --- a/services/sandbox_manager/main/cpp/src/service/sandbox_manager_service.cpp +++ b/services/sandbox_manager/main/cpp/src/service/sandbox_manager_service.cpp @@ -670,7 +670,7 @@ bool SandboxManagerService::PackageChangedEventAction(const SystemAbilityOnDeman { auto wantMap = startReason.GetExtraData().GetWant(); std::string bundleName; - int32_t userId; + int32_t userId = -1; for (auto i = wantMap.begin(); i != wantMap.end(); ++i) { std::string key = std::string(i->first.data()); std::string value = std::string(i->second.data()); @@ -691,7 +691,7 @@ bool SandboxManagerService::PackageChangedEventAction(const SystemAbilityOnDeman return false; } size_t idx = 0; - userId = std::stoul(value, &idx); + userId = std::stoi(value, &idx); if (idx != value.length()) { SANDBOXMANAGER_LOG_ERROR(LABEL, "Convert failed, userId = %{public}s.", value.c_str()); return false; @@ -703,6 +703,11 @@ bool SandboxManagerService::PackageChangedEventAction(const SystemAbilityOnDeman } } + if ((userId == -1) || (bundleName.empty())) { + SANDBOXMANAGER_LOG_ERROR(LABEL, "PackageChangedEventAction failed by error input."); + return false; + } + SANDBOXMANAGER_LOG_INFO(LABEL, "bundleName = %{public}s.%{public}d", bundleName.c_str(), userId); int32_t ret = PolicyInfoManager::GetInstance().CleanPolicyByPackageChanged(bundleName, userId); if (ret != SANDBOX_MANAGER_OK) { diff --git a/services/sandbox_manager/test/unittest/sandbox_manager_service_test.cpp b/services/sandbox_manager/test/unittest/sandbox_manager_service_test.cpp index 680cb44732f47dd8a73f2c4922c8d6c28d3b6df2..af11fa63cef31cce26588801cc12d775a5f705e1 100644 --- a/services/sandbox_manager/test/unittest/sandbox_manager_service_test.cpp +++ b/services/sandbox_manager/test/unittest/sandbox_manager_service_test.cpp @@ -505,6 +505,40 @@ HWTEST_F(SandboxManagerServiceTest, SandboxManagerServiceTest013, TestSize.Level SetSelfTokenID(selfTokenId_); } +/** + * @tc.name: SandboxManagerServiceTest014 + * @tc.desc: Test COMMON_EVENT_PACKAGE_CHANGED + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(SandboxManagerServiceTest, SandboxManagerServiceTest014, TestSize.Level0) +{ + ASSERT_TRUE(sandboxManagerService_->Initialize()); + sandboxManagerService_->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "test"); + sandboxManagerService_->OnAddSystemAbility(0, "test"); + SystemAbilityOnDemandReason startReason; + startReason.SetName(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_CHANGED); + std::map want = {{"test", ""}}; + OnDemandReasonExtraData extraData1(0, "test", want); + startReason.SetExtraData(extraData1); + EXPECT_FALSE(sandboxManagerService_->StartByEventAction(startReason)); + + want = {{"bundleName", ""}}; + OnDemandReasonExtraData extraData2(0, "test", want); + startReason.SetExtraData(extraData2); + EXPECT_FALSE(sandboxManagerService_->StartByEventAction(startReason)); + + want = {{"userId", "test"}}; + OnDemandReasonExtraData extraData3(0, "test", want); + startReason.SetExtraData(extraData3); + EXPECT_FALSE(sandboxManagerService_->StartByEventAction(startReason)); + + want = {{"userId", "0"}}; + OnDemandReasonExtraData extraData4(0, "test", want); + startReason.SetExtraData(extraData4); + EXPECT_FALSE(sandboxManagerService_->StartByEventAction(startReason)); +} + /** * @tc.name: SandboxManagerStub001 * @tc.desc: Test CleanPersistPolicyByPath