• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }