1 /*
2 * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <fuzzer/FuzzedDataProvider.h>
17
18 #define private public
19 #include "bundleresprocess_fuzzer.h"
20
21 #include "bundle_resource_process.h"
22 #include "securec.h"
23 #include "bms_fuzztest_util.h"
24
25 using namespace OHOS::AppExecFwk;
26 using namespace OHOS::AppExecFwk::BMSFuzzTestUtil;
27 namespace OHOS {
28 constexpr size_t U32_AT_SIZE = 4;
29 constexpr uint32_t CODE_MAX = 8;
30 const std::string MODULE_NAME = "entry";
31 const std::string ABILITY_NAME = "com.example.bmsaccesstoken1.MainAbility";
32
GeneratResourceInfo(FuzzedDataProvider & fdp,ResourceInfo & resourceInfo)33 void GeneratResourceInfo(FuzzedDataProvider& fdp, ResourceInfo &resourceInfo)
34 {
35 resourceInfo.labelNeedParse_ = fdp.ConsumeBool();
36 resourceInfo.iconNeedParse_ = fdp.ConsumeBool();
37 resourceInfo.iconId_ = fdp.ConsumeIntegral<uint32_t>();
38 resourceInfo.appIndex_ = fdp.ConsumeIntegral<uint32_t>();
39 resourceInfo.extensionAbilityType_ = fdp.ConsumeIntegral<uint32_t>();
40 resourceInfo.bundleName_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
41 resourceInfo.moduleName_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
42 resourceInfo.abilityName_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
43 resourceInfo.label_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
44 resourceInfo.icon_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
45 resourceInfo.hapPath_ = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
46 }
47
DoSomethingInterestingWithMyAPIOne(const uint8_t * data,size_t size)48 bool DoSomethingInterestingWithMyAPIOne(const uint8_t* data, size_t size)
49 {
50 FuzzedDataProvider fdp(data, size);
51 std::string bundleName = fdp.ConsumeRandomLengthString(BMSFuzzTestUtil::STRING_MAX_LENGTH);
52 std::vector<ResourceInfo> resourceInfos;
53 ResourceInfo resourceInfo;
54 GeneratResourceInfo(fdp, resourceInfo);
55 resourceInfos.emplace_back(resourceInfo);
56 int32_t userId = BMSFuzzTestUtil::GenerateRandomUser(fdp);
57 InnerBundleUserInfo innerUserInfo;
58 innerUserInfo.bundleUserInfo.userId = userId;
59 BundleResourceProcess::GetResourceInfoByBundleName(bundleName, userId, resourceInfos);
60 BundleResourceProcess::GetLauncherResourceInfoByAbilityName(bundleName, MODULE_NAME, ABILITY_NAME,
61 userId, resourceInfo);
62 std::map<std::string, std::vector<ResourceInfo>> resourceMapInfos;
63 BundleResourceProcess::GetAllResourceInfo(userId, resourceMapInfos);
64 std::vector<std::string> resourceNames = BMSFuzzTestUtil::GenerateStringArray(fdp);
65 BundleResourceProcess::GetResourceInfoByColorModeChanged(resourceNames, userId, resourceInfos);
66 std::string targetBundleName = fdp.ConsumeRandomLengthString(BMSFuzzTestUtil::STRING_MAX_LENGTH);
67 BundleResourceProcess::GetTargetBundleName(bundleName, targetBundleName);
68 ApplicationInfo applicationInfo;
69 BMSFuzzTestUtil::GenerateApplicationInfo(fdp, applicationInfo);
70 applicationInfo.bundleName = bundleName;
71 applicationInfo.bundleType = BundleType::APP;
72 InnerBundleInfo bundleInfo;
73 bundleInfo.SetBaseApplicationInfo(applicationInfo);
74 BundleResourceProcess::GetBundleResourceInfo(bundleInfo, userId, resourceInfo);
75 applicationInfo.bundleName = "";
76 bundleInfo.SetBaseApplicationInfo(applicationInfo);
77 BundleResourceProcess::GetBundleResourceInfo(bundleInfo, userId, resourceInfo);
78 applicationInfo.bundleName = bundleName;
79 applicationInfo.bundleType = BundleType::SHARED;
80 bundleInfo.SetBaseApplicationInfo(applicationInfo);
81 BundleResourceProcess::GetBundleResourceInfo(bundleInfo, userId, resourceInfo);
82 applicationInfo.bundleType = BundleType::APP;
83 bundleInfo.SetBaseApplicationInfo(applicationInfo);
84 BundleResourceProcess::GetLauncherAbilityResourceInfos(bundleInfo, userId, resourceInfos);
85 bundleInfo.SetOverlayType(OverlayType::OVERLAY_INTERNAL_BUNDLE);
86 BundleResourceProcess::GetAbilityResourceInfos(bundleInfo, userId, resourceInfos);
87 BundleResourceProcess::ConvertToBundleResourceInfo(bundleInfo);
88 BundleResourceProcess::InnerGetResourceInfo(bundleInfo, userId, resourceInfos);
89 BundleResourceProcess::OnGetResourceInfo(bundleInfo, userId, resourceInfos);
90 return true;
91 }
DoSomethingInterestingWithMyAPITwo(const uint8_t * data,size_t size)92 bool DoSomethingInterestingWithMyAPITwo(const uint8_t* data, size_t size)
93 {
94 FuzzedDataProvider fdp(data, size);
95 ApplicationInfo applicationInfo;
96 applicationInfo.hideDesktopIcon = false;
97 InnerBundleInfo bundleInfo;
98 std::string bundleName = fdp.ConsumeRandomLengthString(BMSFuzzTestUtil::STRING_MAX_LENGTH);
99 bundleInfo.SetBaseApplicationInfo(applicationInfo);
100 BundleResourceProcess::CheckIsNeedProcessAbilityResource(bundleInfo);
101 InnerBundleUserInfo innerUserInfo;
102 int32_t userId = BMSFuzzTestUtil::GenerateRandomUser(fdp);
103 innerUserInfo.bundleUserInfo.overlayModulesState.push_back("1_overlay_1");
104 innerUserInfo.bundleUserInfo.overlayModulesState.push_back("2_overlay_2");
105 innerUserInfo.bundleName = bundleName;
106 bundleInfo.AddInnerBundleUserInfo(innerUserInfo);
107 std::vector<std::string> overlayHapPaths = BMSFuzzTestUtil::GenerateStringArray(fdp);
108 BundleResourceProcess::GetOverlayModuleHapPaths(bundleInfo, MODULE_NAME, userId, overlayHapPaths);
109 std::vector<ResourceInfo> resourceInfos;
110 ResourceInfo resourceInfo;
111 GeneratResourceInfo(fdp, resourceInfo);
112 resourceInfos.emplace_back(resourceInfo);
113 BundleResourceProcess::ChangeDynamicIcon(resourceInfos, resourceInfo);
114 BundleResourceProcess::GetDynamicIcon(bundleInfo, userId, resourceInfo);
115 AbilityInfo abilityInfo;
116 BMSFuzzTestUtil::GenerateAbilityInfo<AbilityInfo>(fdp, abilityInfo);
117 InnerModuleInfo innerModuleInfo;
118 bundleInfo.InsertInnerModuleInfo("moduleinfo", innerModuleInfo);
119 BundleResourceProcess::ConvertToBundleResourceInfo(bundleInfo);
120 return true;
121 }
DoSomethingInterestingWithMyAPIThree(const uint8_t * data,size_t size)122 bool DoSomethingInterestingWithMyAPIThree(const uint8_t* data, size_t size)
123 {
124 FuzzedDataProvider fdp(data, size);
125 InnerExtensionInfo innerExtensionInfo;
126 ApplicationInfo applicationInfo;
127 BMSFuzzTestUtil::GenerateApplicationInfo(fdp, applicationInfo);
128 applicationInfo.bundleName = "";
129 InnerBundleInfo bundleInfo;
130 bundleInfo.SetBaseApplicationInfo(applicationInfo);
131 BundleResourceProcess::CheckIsNeedProcessAbilityResource(bundleInfo);
132 std::string bundleName = fdp.ConsumeRandomLengthString(BMSFuzzTestUtil::STRING_MAX_LENGTH);
133 applicationInfo.bundleName = bundleName;
134 applicationInfo.bundleType = BundleType::SHARED;
135 bundleInfo.SetBaseApplicationInfo(applicationInfo);
136 BundleResourceProcess::CheckIsNeedProcessAbilityResource(bundleInfo);
137 applicationInfo.bundleType = BundleType::APP;
138 applicationInfo.hideDesktopIcon = true;
139 bundleInfo.SetBaseApplicationInfo(applicationInfo);
140 BundleResourceProcess::CheckIsNeedProcessAbilityResource(bundleInfo);
141 applicationInfo.hideDesktopIcon = false;
142 bundleInfo.SetBaseApplicationInfo(applicationInfo);
143 BundleInfo bundleInforTest;
144 bundleInforTest.entryInstallationFree = true;
145 bundleInfo.SetBaseBundleInfo(bundleInforTest);
146 BundleResourceProcess::CheckIsNeedProcessAbilityResource(bundleInfo);
147 int32_t state = 0;
148 int32_t userId = BMSFuzzTestUtil::GenerateRandomUser(fdp);
149 BundleResourceProcess::GetExternalOverlayHapState(ABILITY_NAME, MODULE_NAME, userId, state);
150 applicationInfo.bundleName = "";
151 bundleInfo.SetBaseApplicationInfo(applicationInfo);
152 std::vector<ResourceInfo> resourceInfos;
153 BundleResourceProcess::GetAbilityResourceInfos(bundleInfo, userId, resourceInfos);
154 applicationInfo.bundleName = bundleName;
155 applicationInfo.bundleType = BundleType::SHARED;
156 bundleInfo.SetBaseApplicationInfo(applicationInfo);
157 BundleResourceProcess::GetAbilityResourceInfos(bundleInfo, userId, resourceInfos);
158 InnerAbilityInfo innerAbilityInfo;
159 BMSFuzzTestUtil::GenerateAbilityInfo<InnerAbilityInfo>(fdp, innerAbilityInfo);
160 bundleInfo.InsertAbilitiesInfo("key", innerAbilityInfo);
161 applicationInfo.bundleType = BundleType::APP;
162 bundleInfo.SetBaseApplicationInfo(applicationInfo);
163 BundleResourceProcess::GetAbilityResourceInfos(bundleInfo, userId, resourceInfos);
164 bundleInfo.InsertExtensionInfo("key", innerExtensionInfo);
165 BundleResourceProcess::GetAbilityResourceInfos(bundleInfo, userId, resourceInfos);
166 BundleResourceProcess::GetAppIndexByBundleName(ABILITY_NAME);
167 BundleResourceProcess::GetCurDynamicIconModule(ABILITY_NAME, userId, state);
168 ExtendResourceInfo extendResourceInfo;
169 BundleResourceProcess::GetExtendResourceInfo(ABILITY_NAME, MODULE_NAME, extendResourceInfo);
170 BundleResourceProcess::IsOnlineTheme(ABILITY_NAME);
171 return true;
172 }
173 }
174
175 // Fuzzer entry point.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)176 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
177 {
178 OHOS::DoSomethingInterestingWithMyAPIOne(data, size);
179 OHOS::DoSomethingInterestingWithMyAPITwo(data, size);
180 OHOS::DoSomethingInterestingWithMyAPIThree(data, size);
181 return 0;
182 }