• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 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 #ifndef BMS_FUZZTEST_UTIL_H
17 #define BMS_FUZZTEST_UTIL_H
18 
19 #include <fuzzer/FuzzedDataProvider.h>
20 #include <map>
21 #include <string>
22 #include <vector>
23 
24 #include "bundle_info.h"
25 #include "bundle_user_info.h"
26 #include "form_info.h"
27 #include "install_param.h"
28 #include "install_plugin_param.h"
29 #include "shortcut_info.h"
30 
31 namespace OHOS {
32 namespace AppExecFwk {
33 namespace BMSFuzzTestUtil {
34 constexpr size_t STRING_MAX_LENGTH = 128;
35 constexpr size_t ARRAY_MAX_LENGTH = 128;
36 constexpr int32_t MINUS_ONE = -1;
37 constexpr uint32_t CODE_MIN_ONE = 1;
38 constexpr uint32_t CODE_MAX_ONE = 1;
39 constexpr uint32_t CODE_MAX_TWO = 2;
40 constexpr uint32_t CODE_MAX_THREE = 3;
41 constexpr uint32_t CODE_MAX_FOUR = 4;
42 constexpr uint32_t CODE_MAX_FIVE = 5;
43 constexpr uint32_t ORIENTATION_MAX = 14;
44 constexpr uint32_t EXTENSION_ABILITY_MAX = 25;
45 const std::vector<int32_t> USERS {
46     Constants::ANY_USERID,
47     Constants::ALL_USERID,
48     Constants::UNSPECIFIED_USERID,
49     Constants::INVALID_USERID,
50     Constants::U1,
51     Constants::DEFAULT_USERID,
52     Constants::START_USERID
53 };
54 
55 std::vector<std::string> GenerateStringArray(FuzzedDataProvider& fdp, size_t arraySizeMax = ARRAY_MAX_LENGTH,
56     size_t stringSize = STRING_MAX_LENGTH)
57 {
58     std::vector<std::string> result;
59     size_t arraySize = fdp.ConsumeIntegralInRange<size_t>(0, arraySizeMax);
60     result.reserve(arraySize);
61 
62     for (size_t i = 0; i < arraySize; ++i) {
63         std::string str = fdp.ConsumeRandomLengthString(stringSize);
64         result.emplace_back(str);
65     }
66 
67     return result;
68 }
69 
GenerateResource(FuzzedDataProvider & fdp)70 Resource GenerateResource(FuzzedDataProvider& fdp)
71 {
72     Resource info;
73     info.id = fdp.ConsumeIntegral<uint32_t>();
74     info.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
75     info.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
76     return info;
77 }
78 
GenerateApplicationInfo(FuzzedDataProvider & fdp,ApplicationInfo & applicationInfo)79 void GenerateApplicationInfo(FuzzedDataProvider& fdp, ApplicationInfo &applicationInfo)
80 {
81     applicationInfo.keepAlive = fdp.ConsumeBool();
82     applicationInfo.removable = fdp.ConsumeBool();
83     applicationInfo.singleton = fdp.ConsumeBool();
84     applicationInfo.userDataClearable = fdp.ConsumeBool();
85     applicationInfo.allowAppRunWhenDeviceFirstLocked = fdp.ConsumeBool();
86     applicationInfo.accessible = fdp.ConsumeBool();
87     applicationInfo.runningResourcesApply = fdp.ConsumeBool();
88     applicationInfo.associatedWakeUp = fdp.ConsumeBool();
89     applicationInfo.hideDesktopIcon = fdp.ConsumeBool();
90     applicationInfo.formVisibleNotify = fdp.ConsumeBool();
91     applicationInfo.isSystemApp = fdp.ConsumeBool();
92     applicationInfo.isLauncherApp = fdp.ConsumeBool();
93     applicationInfo.isFreeInstallApp = fdp.ConsumeBool();
94     applicationInfo.asanEnabled = fdp.ConsumeBool();
95     applicationInfo.debug = fdp.ConsumeBool();
96     applicationInfo.distributedNotificationEnabled = fdp.ConsumeBool();
97     applicationInfo.installedForAllUser = fdp.ConsumeBool();
98     applicationInfo.allowEnableNotification = fdp.ConsumeBool();
99     applicationInfo.allowMultiProcess = fdp.ConsumeBool();
100     applicationInfo.gwpAsanEnabled = fdp.ConsumeBool();
101     applicationInfo.enabled = fdp.ConsumeBool();
102     applicationInfo.hasPlugin = fdp.ConsumeBool();
103     applicationInfo.multiProjects = fdp.ConsumeBool();
104     applicationInfo.isCompressNativeLibs = fdp.ConsumeBool();
105     applicationInfo.tsanEnabled = fdp.ConsumeBool();
106     applicationInfo.hwasanEnabled = fdp.ConsumeBool();
107     applicationInfo.ubsanEnabled = fdp.ConsumeBool();
108     applicationInfo.cloudFileSyncEnabled = fdp.ConsumeBool();
109     applicationInfo.cloudStructuredDataSyncEnabled = fdp.ConsumeBool();
110     applicationInfo.needAppDetail = fdp.ConsumeBool();
111     applicationInfo.versionCode = fdp.ConsumeIntegral<uint32_t>();
112     applicationInfo.apiCompatibleVersion = fdp.ConsumeIntegral<uint32_t>();
113     applicationInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
114     applicationInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
115     applicationInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
116     applicationInfo.accessTokenId = fdp.ConsumeIntegral<uint32_t>();
117     applicationInfo.applicationReservedFlag = fdp.ConsumeIntegral<uint32_t>();
118     applicationInfo.apiTargetVersion = fdp.ConsumeIntegral<int32_t>();
119     applicationInfo.minCompatibleVersionCode = fdp.ConsumeIntegral<int32_t>();
120     applicationInfo.supportedModes = fdp.ConsumeIntegral<int32_t>();
121     applicationInfo.appIndex = fdp.ConsumeIntegral<int32_t>();
122     applicationInfo.uid = fdp.ConsumeIntegral<int32_t>();
123     applicationInfo.flags = fdp.ConsumeIntegral<int32_t>();
124     applicationInfo.targetPriority = fdp.ConsumeIntegral<int32_t>();
125     applicationInfo.overlayState = fdp.ConsumeIntegral<int32_t>();
126     applicationInfo.maxChildProcess = fdp.ConsumeIntegral<int32_t>();
127     applicationInfo.applicationFlags = fdp.ConsumeIntegral<int32_t>();
128     applicationInfo.bundleType = static_cast<BundleType>(fdp.ConsumeIntegralInRange<int32_t>(0, CODE_MAX_FOUR));
129     applicationInfo.crowdtestDeadline = fdp.ConsumeIntegral<int64_t>();
130     applicationInfo.accessTokenIdEx = fdp.ConsumeIntegral<uint64_t>();
131     applicationInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
132     applicationInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
133     applicationInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
134     applicationInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
135     applicationInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
136     applicationInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
137     applicationInfo.asanLogPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
138     applicationInfo.codePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
139     applicationInfo.dataDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
140     applicationInfo.dataBaseDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
141     applicationInfo.cacheDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
142     applicationInfo.entryDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
143     applicationInfo.apiReleaseType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
144     applicationInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
145     applicationInfo.entityType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
146     applicationInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
147     applicationInfo.vendor = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
148     applicationInfo.appPrivilegeLevel = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
149     applicationInfo.appDistributionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
150     applicationInfo.appProvisionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
151     applicationInfo.nativeLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
152     applicationInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
153     applicationInfo.arkNativeFilePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
154     applicationInfo.arkNativeFileAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
155     applicationInfo.fingerprint = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
156     applicationInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
157     applicationInfo.entryModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
158     applicationInfo.signatureKey = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
159     applicationInfo.targetBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
160     applicationInfo.compileSdkVersion = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
161     applicationInfo.compileSdkType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
162     applicationInfo.organization = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
163     applicationInfo.appDetailAbilityLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
164     applicationInfo.installSource = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
165     applicationInfo.configuration = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
166     applicationInfo.iconResource = GenerateResource(fdp);
167     applicationInfo.labelResource = GenerateResource(fdp);
168     applicationInfo.descriptionResource = GenerateResource(fdp);
169 
170     applicationInfo.allowCommonEvent = GenerateStringArray(fdp);
171     applicationInfo.assetAccessGroups = GenerateStringArray(fdp);
172 
173     // assign when calling the get interface
174     applicationInfo.permissions = GenerateStringArray(fdp);
175     applicationInfo.moduleSourceDirs = GenerateStringArray(fdp);
176     // Installation-free
177     applicationInfo.targetBundleList = GenerateStringArray(fdp);
178 }
179 
GenerateSignatureInfo(FuzzedDataProvider & fdp,SignatureInfo & signatureInfo)180 void GenerateSignatureInfo(FuzzedDataProvider& fdp, SignatureInfo &signatureInfo)
181 {
182     signatureInfo.appId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
183     signatureInfo.fingerprint = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
184     signatureInfo.appIdentifier = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
185     signatureInfo.certificate = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
186 }
187 
188 template<typename T>
GenerateAbilityInfo(FuzzedDataProvider & fdp,T & abilityInfo)189 void GenerateAbilityInfo(FuzzedDataProvider& fdp, T &abilityInfo)
190 {
191     abilityInfo.visible = fdp.ConsumeBool();
192     abilityInfo.isLauncherAbility = fdp.ConsumeBool();
193     abilityInfo.isNativeAbility = fdp.ConsumeBool();
194     abilityInfo.enabled = fdp.ConsumeBool();
195     abilityInfo.supportPipMode = fdp.ConsumeBool();
196     abilityInfo.formEnabled = fdp.ConsumeBool();
197     abilityInfo.removeMissionAfterTerminate = fdp.ConsumeBool();
198     abilityInfo.isModuleJson = fdp.ConsumeBool();
199     abilityInfo.isStageBasedModel = fdp.ConsumeBool();
200     abilityInfo.continuable = fdp.ConsumeBool();
201     // whether to display in the missions list
202     abilityInfo.excludeFromMissions = fdp.ConsumeBool();
203     abilityInfo.unclearableMission = fdp.ConsumeBool();
204     abilityInfo.excludeFromDock = fdp.ConsumeBool();
205     // whether to support recover UI interface
206     abilityInfo.recoverable = fdp.ConsumeBool();
207     abilityInfo.isolationProcess = fdp.ConsumeBool();
208     abilityInfo.multiUserShared = fdp.ConsumeBool();
209     abilityInfo.grantPermission = fdp.ConsumeBool();
210     abilityInfo.directLaunch = fdp.ConsumeBool();
211 
212     abilityInfo.linkType = static_cast<LinkType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
213     abilityInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
214     abilityInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
215     abilityInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
216     abilityInfo.orientationId = fdp.ConsumeIntegral<uint32_t>();
217     abilityInfo.formEntity = fdp.ConsumeIntegral<uint32_t>();
218     abilityInfo.backgroundModes = fdp.ConsumeIntegral<uint32_t>();
219     abilityInfo.startWindowId = fdp.ConsumeIntegral<uint32_t>();
220     abilityInfo.startWindowIconId = fdp.ConsumeIntegral<uint32_t>();
221     abilityInfo.startWindowBackgroundId = fdp.ConsumeIntegral<uint32_t>();
222     abilityInfo.maxWindowWidth = fdp.ConsumeIntegral<uint32_t>();
223     abilityInfo.minWindowWidth = fdp.ConsumeIntegral<uint32_t>();
224     abilityInfo.maxWindowHeight = fdp.ConsumeIntegral<uint32_t>();
225     abilityInfo.minWindowHeight = fdp.ConsumeIntegral<uint32_t>();
226     abilityInfo.packageSize = fdp.ConsumeIntegral<uint32_t>();
227     abilityInfo.minFormHeight = fdp.ConsumeIntegral<int32_t>();
228     abilityInfo.defaultFormHeight = fdp.ConsumeIntegral<int32_t>();
229     abilityInfo.minFormWidth = fdp.ConsumeIntegral<int32_t>();
230     abilityInfo.defaultFormWidth = fdp.ConsumeIntegral<int32_t>();
231     abilityInfo.priority = fdp.ConsumeIntegral<int32_t>();
232     abilityInfo.appIndex = fdp.ConsumeIntegral<int32_t>();
233     abilityInfo.uid = fdp.ConsumeIntegral<int32_t>();
234     abilityInfo.type = static_cast<AbilityType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_FIVE));
235     abilityInfo.extensionAbilityType =
236         static_cast<ExtensionAbilityType>(fdp.ConsumeIntegralInRange<uint16_t>(0, EXTENSION_ABILITY_MAX));
237     abilityInfo.orientation = static_cast<DisplayOrientation>(fdp.ConsumeIntegralInRange<uint8_t>(0, ORIENTATION_MAX));
238     abilityInfo.launchMode = static_cast<LaunchMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
239     abilityInfo.compileMode = static_cast<CompileMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_ONE));
240     abilityInfo.subType = static_cast<AbilitySubType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_ONE));
241 
242     abilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);  // ability name, only the main class name
243     abilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
244     abilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
245     abilityInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
246     abilityInfo.theme = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
247     abilityInfo.kind = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);  // ability category
248     abilityInfo.extensionTypeName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
249     abilityInfo.srcPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
250     abilityInfo.srcLanguage = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
251 
252     abilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
253     abilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
254     abilityInfo.targetAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
255     abilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
256     abilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
257 
258     // set when install
259     abilityInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);  // the "module.package" in config.json
260     abilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
261     abilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);       // the "module.name" in config.json
262     abilityInfo.applicationName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);  // the "bundlename" in config.json
263 
264     abilityInfo.codePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);         // ability main code path with name
265     abilityInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);     // resource path for resource init
266     abilityInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
267 
268     abilityInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
269 
270     // configuration fields on startup page
271     abilityInfo.startWindow = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
272     abilityInfo.startWindowIcon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
273     abilityInfo.startWindowBackground = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
274     abilityInfo.preferMultiWindowOrientation = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
275 
276     abilityInfo.originalBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
277     abilityInfo.appName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
278     abilityInfo.privacyUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
279     abilityInfo.privacyName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
280     abilityInfo.downloadUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
281     abilityInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
282     abilityInfo.className = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
283     abilityInfo.originalClassName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
284     abilityInfo.uriPermissionMode = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
285     abilityInfo.uriPermissionPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
286     abilityInfo.libPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
287     abilityInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
288 }
289 
GenerateBundleInfo(FuzzedDataProvider & fdp,BundleInfo & bundleInfo)290 void GenerateBundleInfo(FuzzedDataProvider& fdp, BundleInfo &bundleInfo)
291 {
292     bundleInfo.isNewVersion = fdp.ConsumeBool();
293     bundleInfo.isKeepAlive = fdp.ConsumeBool();
294     bundleInfo.singleton = fdp.ConsumeBool();
295     bundleInfo.isPreInstallApp = fdp.ConsumeBool();
296     bundleInfo.isNativeApp = fdp.ConsumeBool();
297     bundleInfo.entryInstallationFree = fdp.ConsumeBool();
298     bundleInfo.isDifferentName = fdp.ConsumeBool();
299     bundleInfo.versionCode = fdp.ConsumeIntegral<uint32_t>();
300     bundleInfo.minCompatibleVersionCode = fdp.ConsumeIntegral<uint32_t>();
301     bundleInfo.compatibleVersion = fdp.ConsumeIntegral<uint32_t>();
302     bundleInfo.targetVersion = fdp.ConsumeIntegral<uint32_t>();
303     bundleInfo.appIndex = fdp.ConsumeIntegral<int32_t>();
304     bundleInfo.minSdkVersion = fdp.ConsumeIntegral<int32_t>();
305     bundleInfo.maxSdkVersion = fdp.ConsumeIntegral<int32_t>();
306     bundleInfo.overlayType = fdp.ConsumeIntegralInRange<int32_t>(CODE_MIN_ONE, CODE_MAX_THREE);
307     bundleInfo.uid = fdp.ConsumeIntegral<int>();
308     bundleInfo.gid = fdp.ConsumeIntegral<int>();
309     bundleInfo.installTime = fdp.ConsumeIntegral<int64_t>();
310     bundleInfo.updateTime = fdp.ConsumeIntegral<int64_t>();
311     bundleInfo.firstInstallTime = fdp.ConsumeIntegral<int64_t>();
312     bundleInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
313     bundleInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
314     bundleInfo.vendor = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
315     bundleInfo.releaseType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
316     bundleInfo.mainEntry = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
317     bundleInfo.entryModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
318     bundleInfo.appId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
319     bundleInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
320     bundleInfo.seInfo = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
321     bundleInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
322     bundleInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
323     bundleInfo.jointUserId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
324 
325     GenerateSignatureInfo(fdp, bundleInfo.signatureInfo);
326 
327     bundleInfo.oldAppIds = GenerateStringArray(fdp);
328     bundleInfo.hapModuleNames = GenerateStringArray(fdp);    // the "module.package" in each config.json
329     bundleInfo.moduleNames = GenerateStringArray(fdp);       // the "module.name" in each config.json
330     bundleInfo.modulePublicDirs = GenerateStringArray(fdp);  // the public paths of all modules of the application.
331     bundleInfo.moduleDirs = GenerateStringArray(fdp);        // the paths of all modules of the application.
332     bundleInfo.moduleResPaths = GenerateStringArray(fdp);    // the paths of all resources paths.
333 
334     bundleInfo.reqPermissions = GenerateStringArray(fdp);
335     bundleInfo.defPermissions = GenerateStringArray(fdp);
336 }
337 
GenerateMap(FuzzedDataProvider & fdp,std::map<std::string,std::string> & data)338 void GenerateMap(FuzzedDataProvider& fdp, std::map<std::string, std::string> &data)
339 {
340     // Generate number of key-value pairs (0 to 128)
341     const size_t numPairs = fdp.ConsumeIntegralInRange<size_t>(0, ARRAY_MAX_LENGTH);
342 
343     for (size_t i = 0; i < numPairs; ++i) {
344         // Generate key with maximum length 128
345         const std::string key = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
346 
347         // Generate value with maximum length 128
348         const std::string value = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
349 
350         // Insert into map (allow overwriting existing keys)
351         data[key] = value;
352     }
353 }
354 
GenerateDeviceFeatureMap(FuzzedDataProvider & fdp,std::map<std::string,std::vector<std::string>> & data)355 void GenerateDeviceFeatureMap(FuzzedDataProvider& fdp, std::map<std::string, std::vector<std::string>> &data)
356 {
357     // Generate number of key-value pairs (0 to 128)
358     const size_t numPairs = fdp.ConsumeIntegralInRange<size_t>(0, ARRAY_MAX_LENGTH);
359 
360     for (size_t i = 0; i < numPairs; ++i) {
361         // Generate key with maximum length 128
362         const std::string key = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
363 
364         // Generate vector value
365         const std::vector<std::string> value = GenerateStringArray(fdp);
366 
367         // Insert into map (allow overwriting existing keys)
368         data[key] = value;
369     }
370 }
371 
GenerateInstallParam(FuzzedDataProvider & fdp,InstallParam & installParam)372 void GenerateInstallParam(FuzzedDataProvider& fdp, InstallParam &installParam)
373 {
374     installParam.isKeepData = fdp.ConsumeBool();
375     installParam.needSavePreInstallInfo = fdp.ConsumeBool();
376     installParam.isPreInstallApp = fdp.ConsumeBool();
377     installParam.removable = fdp.ConsumeBool();
378     // whether need copy hap to install path
379     installParam.copyHapToInstallPath = fdp.ConsumeBool();
380     // is aging Cause uninstall.
381     installParam.isAgingUninstall = fdp.ConsumeBool();
382     installParam.needSendEvent = fdp.ConsumeBool();
383     installParam.withCopyHaps = fdp.ConsumeBool();
384     // for MDM self update
385     installParam.isSelfUpdate = fdp.ConsumeBool();
386     // is shell token
387     installParam.isCallByShell = fdp.ConsumeBool();
388     // for AOT
389     installParam.isOTA = fdp.ConsumeBool();
390     installParam.concentrateSendEvent = fdp.ConsumeBool();
391     installParam.isRemoveUser = fdp.ConsumeBool();
392     installParam.allUser = fdp.ConsumeBool();
393     installParam.isPatch = fdp.ConsumeBool();
394     installParam.isDataPreloadHap = fdp.ConsumeBool();
395     installParam.userId = fdp.ConsumeIntegral<int32_t>();
396     installParam.installFlag =
397         static_cast<InstallFlag>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_ONE));
398     installParam.installLocation =
399         static_cast<InstallLocation>(fdp.ConsumeIntegralInRange<int8_t>(CODE_MIN_ONE, CODE_MAX_TWO));
400     installParam.installBundlePermissionStatus =
401         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
402     installParam.installEnterpriseBundlePermissionStatus =
403         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
404     installParam.installEtpNormalBundlePermissionStatus =
405         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
406     installParam.installEtpMdmBundlePermissionStatus =
407         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
408     installParam.installInternaltestingBundlePermissionStatus =
409         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
410     installParam.installUpdateSelfBundlePermissionStatus =
411         static_cast<PermissionStatus>(fdp.ConsumeIntegralInRange<int8_t>(0, CODE_MAX_TWO));
412     installParam.preinstallSourceFlag = static_cast<ApplicationInfoFlag>(fdp.ConsumeIntegral<int32_t>());
413     installParam.crowdtestDeadline = fdp.ConsumeIntegral<int64_t>(); // for crowdtesting type hap
414     // Indicates the distribution type
415     installParam.specifiedDistributionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
416     // Indicates the additional Info
417     installParam.additionalInfo = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
418     installParam.appIdentifier = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
419     // shared bundle directory paths
420     installParam.sharedBundleDirPaths = GenerateStringArray(fdp);
421     GenerateMap(fdp, installParam.parameters);
422     GenerateMap(fdp, installParam.pgoParams);
423     GenerateMap(fdp, installParam.hashParams);
424     GenerateMap(fdp, installParam.verifyCodeParams);
425 }
426 
GenerateInstallPluginParam(FuzzedDataProvider & fdp,InstallPluginParam & installPluginParam)427 void GenerateInstallPluginParam(FuzzedDataProvider& fdp, InstallPluginParam &installPluginParam)
428 {
429     installPluginParam.userId = fdp.ConsumeIntegral<int32_t>();
430     GenerateMap(fdp, installPluginParam.parameters);
431 }
432 
GenerateBundleUserInfo(FuzzedDataProvider & fdp,BundleUserInfo & bundleUserInfo)433 void GenerateBundleUserInfo(FuzzedDataProvider& fdp, BundleUserInfo &bundleUserInfo)
434 {
435     bundleUserInfo.enabled = fdp.ConsumeBool();
436     bundleUserInfo.userId = fdp.ConsumeIntegral<int32_t>();
437     bundleUserInfo.setEnabledCaller = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
438     bundleUserInfo.disabledAbilities = GenerateStringArray(fdp);
439     bundleUserInfo.overlayModulesState = GenerateStringArray(fdp);
440 }
441 
GenerateCompatibleApplicationInfo(FuzzedDataProvider & fdp,CompatibleApplicationInfo & compatibleApplicationInfo)442 void GenerateCompatibleApplicationInfo(FuzzedDataProvider& fdp, CompatibleApplicationInfo &compatibleApplicationInfo)
443 {
444     compatibleApplicationInfo.isCompressNativeLibs = fdp.ConsumeBool();
445     compatibleApplicationInfo.systemApp = fdp.ConsumeBool();
446     compatibleApplicationInfo.enabled = fdp.ConsumeBool();
447     compatibleApplicationInfo.debug = fdp.ConsumeBool();
448     compatibleApplicationInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
449     compatibleApplicationInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
450     compatibleApplicationInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
451     compatibleApplicationInfo.supportedModes = fdp.ConsumeIntegral<int32_t>(); // supported modes.
452     // items set when installing.
453     compatibleApplicationInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
454     compatibleApplicationInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
455     compatibleApplicationInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
456     compatibleApplicationInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
457     compatibleApplicationInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
458     compatibleApplicationInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
459     compatibleApplicationInfo.permissions = GenerateStringArray(fdp);
460 }
461 
GenerateCompatibleAbilityInfo(FuzzedDataProvider & fdp,CompatibleAbilityInfo & compatibleAbilityInfo)462 void GenerateCompatibleAbilityInfo(FuzzedDataProvider& fdp, CompatibleAbilityInfo &compatibleAbilityInfo)
463 {
464     compatibleAbilityInfo.visible = fdp.ConsumeBool();
465     compatibleAbilityInfo.formEnabled = fdp.ConsumeBool();
466     compatibleAbilityInfo.multiUserShared = fdp.ConsumeBool();
467     compatibleAbilityInfo.supportPipMode = fdp.ConsumeBool();
468     compatibleAbilityInfo.grantPermission = fdp.ConsumeBool();
469     compatibleAbilityInfo.directLaunch = fdp.ConsumeBool();
470     compatibleAbilityInfo.enabled = fdp.ConsumeBool();
471     compatibleAbilityInfo.backgroundModes = fdp.ConsumeIntegral<uint32_t>();
472     compatibleAbilityInfo.packageSize = fdp.ConsumeIntegral<uint32_t>();
473 
474     // form widget info
475     compatibleAbilityInfo.formEntity = 1; // where form can be displayed
476 
477     compatibleAbilityInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
478     compatibleAbilityInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
479     compatibleAbilityInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
480     compatibleAbilityInfo.minFormHeight = fdp.ConsumeIntegral<int32_t>(); // minimum height of ability.
481     compatibleAbilityInfo.defaultFormHeight = fdp.ConsumeIntegral<int32_t>(); // default height of ability.
482     compatibleAbilityInfo.minFormWidth = fdp.ConsumeIntegral<int32_t>(); // minimum width of ability.
483     compatibleAbilityInfo.defaultFormWidth = fdp.ConsumeIntegral<int32_t>(); // default width of ability.
484     // deprecated: remove this field in new package format.
485     compatibleAbilityInfo.type = static_cast<AbilityType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_FIVE));
486     compatibleAbilityInfo.subType = static_cast<AbilitySubType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_ONE));
487     compatibleAbilityInfo.orientation =
488         static_cast<DisplayOrientation>(fdp.ConsumeIntegralInRange<uint8_t>(0, ORIENTATION_MAX));
489     compatibleAbilityInfo.launchMode = static_cast<LaunchMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
490     // deprecated: ability code class simple name, use 'className' instead.
491     compatibleAbilityInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
492     compatibleAbilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
493     compatibleAbilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // display name on screen.
494     compatibleAbilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
495     compatibleAbilityInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
496     // used as icon data (base64) for WEB Ability.
497     compatibleAbilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // uri of ability.
498     compatibleAbilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
499     // indicates the name of the .hap package to which the capability belongs.
500     compatibleAbilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
501     compatibleAbilityInfo.targetAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
502     compatibleAbilityInfo.appName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
503     compatibleAbilityInfo.privacyUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
504     compatibleAbilityInfo.privacyName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
505     compatibleAbilityInfo.downloadUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
506     compatibleAbilityInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
507     compatibleAbilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
508     compatibleAbilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
509     compatibleAbilityInfo.uriPermissionMode = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
510     compatibleAbilityInfo.uriPermissionPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
511 
512     // set when install
513     compatibleAbilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
514     compatibleAbilityInfo.className = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
515     compatibleAbilityInfo.originalClassName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
516     compatibleAbilityInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
517     compatibleAbilityInfo.permissions = GenerateStringArray(fdp);
518     compatibleAbilityInfo.deviceTypes = GenerateStringArray(fdp);
519     compatibleAbilityInfo.deviceCapabilities = GenerateStringArray(fdp);
520     GenerateCompatibleApplicationInfo(fdp, compatibleAbilityInfo.applicationInfo);
521 }
522 
GenerateExtensionAbilityInfo(FuzzedDataProvider & fdp,ExtensionAbilityInfo & extensionAbilityInfo)523 void GenerateExtensionAbilityInfo(FuzzedDataProvider& fdp, ExtensionAbilityInfo &extensionAbilityInfo)
524 {
525     extensionAbilityInfo.visible = fdp.ConsumeBool();
526 
527     // set when install
528     extensionAbilityInfo.enabled = fdp.ConsumeBool();
529 
530     extensionAbilityInfo.needCreateSandbox = fdp.ConsumeBool();
531     extensionAbilityInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
532     extensionAbilityInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
533     extensionAbilityInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
534     extensionAbilityInfo.priority = fdp.ConsumeIntegral<int32_t>();
535     // for NAPI, save self query cache
536     extensionAbilityInfo.uid = fdp.ConsumeIntegral<int32_t>();
537     extensionAbilityInfo.appIndex = fdp.ConsumeIntegral<int32_t>();
538     extensionAbilityInfo.type =
539         static_cast<ExtensionAbilityType>(fdp.ConsumeIntegralInRange<uint16_t>(0, ARRAY_MAX_LENGTH));
540     extensionAbilityInfo.compileMode = static_cast<CompileMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MIN_ONE));
541     extensionAbilityInfo.extensionProcessMode =
542         static_cast<ExtensionProcessMode>(fdp.ConsumeIntegralInRange<int8_t>(-1, CODE_MAX_THREE));
543     extensionAbilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
544     extensionAbilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
545     extensionAbilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
546     extensionAbilityInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
547     extensionAbilityInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
548     extensionAbilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
549     extensionAbilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
550     extensionAbilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
551     extensionAbilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
552     extensionAbilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
553     extensionAbilityInfo.extensionTypeName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
554     extensionAbilityInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
555     extensionAbilityInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
556     extensionAbilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
557     extensionAbilityInfo.customProcess = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
558     std::vector<std::string> permissions = GenerateStringArray(fdp);
559     std::vector<std::string> appIdentifierAllowList = GenerateStringArray(fdp);
560     std::vector<std::string> dataGroupIds = GenerateStringArray(fdp);
561     std::vector<std::string> validDataGroupIds = GenerateStringArray(fdp);
562     GenerateApplicationInfo(fdp, extensionAbilityInfo.applicationInfo);
563 }
564 
GenerateFormInfo(FuzzedDataProvider & fdp,FormInfo & formInfo)565 void GenerateFormInfo(FuzzedDataProvider& fdp, FormInfo &formInfo)
566 {
567     formInfo.defaultFlag = fdp.ConsumeBool();
568     formInfo.formVisibleNotify = fdp.ConsumeBool();
569     formInfo.updateEnabled = fdp.ConsumeBool();
570     formInfo.isStatic = fdp.ConsumeBool();
571     formInfo.dataProxyEnabled = fdp.ConsumeBool();
572     formInfo.isDynamic = fdp.ConsumeBool();
573     formInfo.transparencyEnabled = fdp.ConsumeBool();
574     formInfo.fontScaleFollowSystem = fdp.ConsumeBool();
575     formInfo.enableBlurBackground = fdp.ConsumeBool();
576     formInfo.appFormVisibleNotify = fdp.ConsumeBool();
577     formInfo.colorMode = static_cast<FormsColorMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MIN_ONE));
578     formInfo.renderingMode = static_cast<FormsRenderingMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
579     formInfo.displayNameId = fdp.ConsumeIntegral<uint32_t>();
580     formInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
581     formInfo.versionCode = fdp.ConsumeIntegral<uint32_t>();
582     formInfo.updateDuration = fdp.ConsumeIntegral<int32_t>();
583     formInfo.defaultDimension = fdp.ConsumeIntegral<int32_t>();
584     formInfo.privacyLevel = fdp.ConsumeIntegral<int32_t>();
585     formInfo.type = static_cast<FormType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
586     formInfo.uiSyntax = static_cast<FormType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_TWO));
587     formInfo.bundleType = static_cast<BundleType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_FOUR));
588     formInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
589     formInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
590     formInfo.originalBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
591     formInfo.relatedBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
592     formInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
593     // the "module.distro.moduleName" in config.json
594     formInfo.abilityName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
595     formInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
596     formInfo.displayName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
597     formInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
598     formInfo.jsComponentName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
599     formInfo.deepLink = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
600     formInfo.formConfigAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
601     formInfo.scheduledUpdateTime = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
602     formInfo.multiScheduledUpdateTime = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
603     formInfo.src = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
604 }
605 
GenerateShortcutInfo(FuzzedDataProvider & fdp,ShortcutInfo & shortcutInfo)606 void GenerateShortcutInfo(FuzzedDataProvider& fdp, ShortcutInfo &shortcutInfo)
607 {
608     shortcutInfo.isStatic = fdp.ConsumeBool();
609     shortcutInfo.isHomeShortcut = fdp.ConsumeBool();
610     shortcutInfo.isEnables = fdp.ConsumeBool();
611     shortcutInfo.visible = fdp.ConsumeBool();
612     shortcutInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
613     shortcutInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
614     shortcutInfo.appIndex = fdp.ConsumeIntegral<int32_t>();
615     shortcutInfo.sourceType = fdp.ConsumeIntegral<int32_t>();
616     shortcutInfo.id = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
617     shortcutInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
618     shortcutInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
619     shortcutInfo.hostAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
620     shortcutInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
621     shortcutInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
622     shortcutInfo.disableMessage = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
623 }
624 
GenerateRandomUser(FuzzedDataProvider & fdp)625 int32_t GenerateRandomUser(FuzzedDataProvider& fdp)
626 {
627     uint8_t size = USERS.size();
628     if (size == 0) {
629         return Constants::START_USERID; // No users available, return 100
630     }
631     uint8_t index = fdp.ConsumeIntegralInRange<uint8_t>(0, size) % size; // 0 to size-1
632     return USERS[index];
633 }
634 
GenerateHapModuleInfo(FuzzedDataProvider & fdp,HapModuleInfo & hapModuleInfo)635 void GenerateHapModuleInfo(FuzzedDataProvider& fdp, HapModuleInfo &hapModuleInfo)
636 {
637     hapModuleInfo.compressNativeLibs = fdp.ConsumeBool();
638     hapModuleInfo.isLibIsolated = fdp.ConsumeBool();
639     hapModuleInfo.deliveryWithInstall = fdp.ConsumeBool();
640     hapModuleInfo.installationFree = fdp.ConsumeBool();
641     hapModuleInfo.isModuleJson = fdp.ConsumeBool();
642     hapModuleInfo.isStageBasedModel = fdp.ConsumeBool();
643     hapModuleInfo.hasIntent = fdp.ConsumeBool();
644     hapModuleInfo.resizeable = fdp.ConsumeBool();
645     hapModuleInfo.descriptionId = fdp.ConsumeIntegral<uint32_t>();
646     hapModuleInfo.iconId = fdp.ConsumeIntegral<uint32_t>();
647     hapModuleInfo.labelId = fdp.ConsumeIntegral<uint32_t>();
648     hapModuleInfo.upgradeFlag = fdp.ConsumeIntegral<int32_t>();
649     hapModuleInfo.supportedModes = fdp.ConsumeIntegral<int>();
650     hapModuleInfo.colorMode =
651         static_cast<ModuleColorMode>(fdp.ConsumeIntegralInRange<int8_t>(MINUS_ONE, CODE_MAX_ONE));
652     hapModuleInfo.moduleType = static_cast<ModuleType>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_THREE));
653     hapModuleInfo.compileMode = fdp.ConsumeBool() ? CompileMode::ES_MODULE : CompileMode::JS_BUNDLE;
654     hapModuleInfo.aotCompileStatus =
655         static_cast<AOTCompileStatus>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_FOUR));
656     hapModuleInfo.isolationMode = static_cast<IsolationMode>(fdp.ConsumeIntegralInRange<uint8_t>(0, CODE_MAX_THREE));
657     hapModuleInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);        // module.name in config.json
658     hapModuleInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
659     hapModuleInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
660     hapModuleInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
661     hapModuleInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
662     hapModuleInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
663     hapModuleInfo.backgroundImg = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
664     hapModuleInfo.mainAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
665     hapModuleInfo.srcPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
666     hapModuleInfo.hashValue = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
667     hapModuleInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
668     hapModuleInfo.nativeLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
669     hapModuleInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
670     // new version fields
671     hapModuleInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
672     hapModuleInfo.mainElementName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
673     hapModuleInfo.pages = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
674     hapModuleInfo.systemTheme = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
675     hapModuleInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
676     hapModuleInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
677     hapModuleInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
678     hapModuleInfo.uiSyntax = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
679     hapModuleInfo.virtualMachine = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
680     hapModuleInfo.moduleSourceDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
681     hapModuleInfo.buildHash = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
682     hapModuleInfo.fileContextMenu = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
683     hapModuleInfo.routerMap = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
684     hapModuleInfo.packageName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
685     hapModuleInfo.abilitySrcEntryDelegator = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
686     hapModuleInfo.abilityStageSrcEntryDelegator = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
687     hapModuleInfo.appStartup = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
688     hapModuleInfo.nativeLibraryFileNames = GenerateStringArray(fdp);
689     hapModuleInfo.reqCapabilities = GenerateStringArray(fdp);
690     hapModuleInfo.deviceTypes = GenerateStringArray(fdp);
691     GenerateDeviceFeatureMap(fdp, hapModuleInfo.requiredDeviceFeatures);
692 }
693 }  // namespace BMSFuzzTestUtil
694 }  // namespace AppExecFwk
695 }  // namespace OHOS
696 #endif  // BMS_FUZZTEST_UTIL_H