diff --git a/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp b/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp index ead7667356dce0e40031147edf7f14a7c99ab212..4d25a9257eba3428b6c1fc9195b57cc92393b5f5 100644 --- a/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp +++ b/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp @@ -367,6 +367,10 @@ bool BundleResourceIconRdb::ConvertToLauncherAbilityResourceInfo( if (getIcon) { ret = absSharedResultSet->GetString(INDEX_ICON, launcherAbilityResourceInfo.icon); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetString label icon, ret: %{public}d"); + if (launcherAbilityResourceInfo.icon.empty()) { + APP_LOGE("-n %{public}s icon is empty", launcherAbilityResourceInfo.bundleName.c_str()); + return false; + } } bool getDrawable = (resourceFlag & static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_DRAWABLE_DESCRIPTOR)) @@ -374,7 +378,10 @@ bool BundleResourceIconRdb::ConvertToLauncherAbilityResourceInfo( if (getDrawable) { ret = absSharedResultSet->GetBlob(INDEX_FOREGROUND, launcherAbilityResourceInfo.foreground); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetBlob foreground, ret: %{public}d"); - + if (launcherAbilityResourceInfo.foreground.empty()) { + APP_LOGE("-n %{public}s foreground is empty", launcherAbilityResourceInfo.bundleName.c_str()); + return false; + } ret = absSharedResultSet->GetBlob(INDEX_BACKGROUND, launcherAbilityResourceInfo.background); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetBlob background, ret: %{public}d"); } diff --git a/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp b/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp index 9e411664437609bb4f0ab9a4368f50f782b1b6dd..0a6b889cf143f7e120d1009b398d179e1d820fd5 100644 --- a/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp +++ b/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp @@ -592,7 +592,11 @@ bool BundleResourceParser::ParseIconResourceInfosWithTheme( APP_LOGW_NOFUNC("ParseResourceInfo fail key:%{public}s", resourceInfos[index].GetKey().c_str()); } } - if (resourceInfos[0].icon_.empty()) { + bool invalidIcon = std::all_of(resourceInfos.begin(), resourceInfos.end(), + [](const auto& resourceInfo) { + return resourceInfo.icon_.empty(); + }); + if (invalidIcon) { APP_LOGE_NOFUNC("ParseResourceInfos fail -n %{public}s -m %{public}s", resourceInfos[0].bundleName_.c_str(), resourceInfos[0].moduleName_.c_str()); return false; diff --git a/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp index d39f997d0e44dcd6548c985b3449348c5068b5b8..8601e8e9a62d53d7bd7157fd6632f6c0666935c6 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp @@ -214,6 +214,41 @@ HWTEST_F(BmsBundleResourceIconRdbTest, DeleteResourceIconInfo_0002, Function | S EXPECT_FALSE(ans); } +/** + * @tc.number: GetResourceIconInfos_0001 + * Function: BundleResourceIconRdb + * @tc.name: test BundleResourceIconRdb + * @tc.desc: 1. system running normally + * 2. test GetResourceIconInfos + */ +HWTEST_F(BmsBundleResourceIconRdbTest, GetResourceIconInfos_0001, Function | SmallTest | Level0) +{ + BundleResourceIconRdb resourceIconRdb; + ResourceInfo resourceInfo; + resourceInfo.bundleName_ = "bundleName_test"; + resourceInfo.appIndex_ = APP_INDEX; + resourceInfo.icon_ = ""; + bool ans = resourceIconRdb.AddResourceIconInfo(USER_ID, IconResourceType::DYNAMIC_ICON, resourceInfo); + EXPECT_TRUE(ans); + + std::vector launcherAbilityResourceInfos; + ans = resourceIconRdb.GetResourceIconInfos(resourceInfo.bundleName_, USER_ID, APP_INDEX, + static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_ICON), + launcherAbilityResourceInfos); + EXPECT_FALSE(ans); + EXPECT_TRUE(launcherAbilityResourceInfos.empty()); + + ans = resourceIconRdb.GetResourceIconInfos(resourceInfo.bundleName_, USER_ID, APP_INDEX, + static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_DRAWABLE_DESCRIPTOR), + launcherAbilityResourceInfos); + EXPECT_FALSE(ans); + EXPECT_TRUE(launcherAbilityResourceInfos.empty()); + + ans = resourceIconRdb.DeleteResourceIconInfo(resourceInfo.bundleName_, USER_ID, + APP_INDEX, IconResourceType::DYNAMIC_ICON); + EXPECT_TRUE(ans); +} + /** * @tc.number: DeleteResourceIconInfos_0001 * Function: BundleResourceIconRdb diff --git a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp index de7bfd15d8146332295e3573adb1203e96339660..94028b5faa835979ef71e92c54a9d842cf0dae87 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp @@ -5294,6 +5294,11 @@ HWTEST_F(BmsBundleResourceTest, ParseResourceInfosWithTheme_0010, Function | Sma resourceInfos.push_back(resourceInfo); ans = parser.ParseIconResourceInfosWithTheme(USERID, resourceInfos); EXPECT_FALSE(ans); + + resourceInfo.icon_ = "icon"; + resourceInfos.push_back(resourceInfo); + ans = parser.ParseIconResourceInfosWithTheme(USERID, resourceInfos); + EXPECT_TRUE(ans); } /**