/* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef BMS_FUZZTEST_UTIL_H #define BMS_FUZZTEST_UTIL_H #include #include #include #include #include "bundle_info.h" #include "bundle_user_info.h" #include "form_info.h" #include "install_param.h" #include "install_plugin_param.h" #include "shortcut_info.h" namespace OHOS { namespace AppExecFwk { namespace BMSFuzzTestUtil { constexpr size_t STRING_MAX_LENGTH = 128; constexpr size_t ARRAY_MAX_LENGTH = 128; constexpr int32_t MINUS_ONE = -1; constexpr uint32_t CODE_MIN_ONE = 1; constexpr uint32_t CODE_MAX_ONE = 1; constexpr uint32_t CODE_MAX_TWO = 2; constexpr uint32_t CODE_MAX_THREE = 3; constexpr uint32_t CODE_MAX_FOUR = 4; constexpr uint32_t CODE_MAX_FIVE = 5; constexpr uint32_t ORIENTATION_MAX = 14; constexpr uint32_t EXTENSION_ABILITY_MAX = 25; const std::vector USERS { Constants::ANY_USERID, Constants::ALL_USERID, Constants::UNSPECIFIED_USERID, Constants::INVALID_USERID, Constants::U1, Constants::DEFAULT_USERID, Constants::START_USERID }; std::vector GenerateStringArray(FuzzedDataProvider& fdp, size_t arraySizeMax = ARRAY_MAX_LENGTH, size_t stringSize = STRING_MAX_LENGTH) { std::vector result; size_t arraySize = fdp.ConsumeIntegralInRange(0, arraySizeMax); result.reserve(arraySize); for (size_t i = 0; i < arraySize; ++i) { std::string str = fdp.ConsumeRandomLengthString(stringSize); result.emplace_back(str); } return result; } Resource GenerateResource(FuzzedDataProvider& fdp) { Resource info; info.id = fdp.ConsumeIntegral(); info.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); info.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); return info; } void GenerateApplicationInfo(FuzzedDataProvider& fdp, ApplicationInfo &applicationInfo) { applicationInfo.keepAlive = fdp.ConsumeBool(); applicationInfo.removable = fdp.ConsumeBool(); applicationInfo.singleton = fdp.ConsumeBool(); applicationInfo.userDataClearable = fdp.ConsumeBool(); applicationInfo.allowAppRunWhenDeviceFirstLocked = fdp.ConsumeBool(); applicationInfo.accessible = fdp.ConsumeBool(); applicationInfo.runningResourcesApply = fdp.ConsumeBool(); applicationInfo.associatedWakeUp = fdp.ConsumeBool(); applicationInfo.hideDesktopIcon = fdp.ConsumeBool(); applicationInfo.formVisibleNotify = fdp.ConsumeBool(); applicationInfo.isSystemApp = fdp.ConsumeBool(); applicationInfo.isLauncherApp = fdp.ConsumeBool(); applicationInfo.isFreeInstallApp = fdp.ConsumeBool(); applicationInfo.asanEnabled = fdp.ConsumeBool(); applicationInfo.debug = fdp.ConsumeBool(); applicationInfo.distributedNotificationEnabled = fdp.ConsumeBool(); applicationInfo.installedForAllUser = fdp.ConsumeBool(); applicationInfo.allowEnableNotification = fdp.ConsumeBool(); applicationInfo.allowMultiProcess = fdp.ConsumeBool(); applicationInfo.gwpAsanEnabled = fdp.ConsumeBool(); applicationInfo.enabled = fdp.ConsumeBool(); applicationInfo.hasPlugin = fdp.ConsumeBool(); applicationInfo.multiProjects = fdp.ConsumeBool(); applicationInfo.isCompressNativeLibs = fdp.ConsumeBool(); applicationInfo.tsanEnabled = fdp.ConsumeBool(); applicationInfo.hwasanEnabled = fdp.ConsumeBool(); applicationInfo.ubsanEnabled = fdp.ConsumeBool(); applicationInfo.cloudFileSyncEnabled = fdp.ConsumeBool(); applicationInfo.cloudStructuredDataSyncEnabled = fdp.ConsumeBool(); applicationInfo.needAppDetail = fdp.ConsumeBool(); applicationInfo.versionCode = fdp.ConsumeIntegral(); applicationInfo.apiCompatibleVersion = fdp.ConsumeIntegral(); applicationInfo.iconId = fdp.ConsumeIntegral(); applicationInfo.labelId = fdp.ConsumeIntegral(); applicationInfo.descriptionId = fdp.ConsumeIntegral(); applicationInfo.accessTokenId = fdp.ConsumeIntegral(); applicationInfo.applicationReservedFlag = fdp.ConsumeIntegral(); applicationInfo.apiTargetVersion = fdp.ConsumeIntegral(); applicationInfo.minCompatibleVersionCode = fdp.ConsumeIntegral(); applicationInfo.supportedModes = fdp.ConsumeIntegral(); applicationInfo.appIndex = fdp.ConsumeIntegral(); applicationInfo.uid = fdp.ConsumeIntegral(); applicationInfo.flags = fdp.ConsumeIntegral(); applicationInfo.targetPriority = fdp.ConsumeIntegral(); applicationInfo.overlayState = fdp.ConsumeIntegral(); applicationInfo.maxChildProcess = fdp.ConsumeIntegral(); applicationInfo.applicationFlags = fdp.ConsumeIntegral(); applicationInfo.bundleType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_FOUR)); applicationInfo.crowdtestDeadline = fdp.ConsumeIntegral(); applicationInfo.accessTokenIdEx = fdp.ConsumeIntegral(); applicationInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.asanLogPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.codePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.dataDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.dataBaseDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.cacheDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.entryDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.apiReleaseType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.entityType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.vendor = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.appPrivilegeLevel = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.appDistributionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.appProvisionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.nativeLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.arkNativeFilePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.arkNativeFileAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.fingerprint = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.entryModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.signatureKey = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.targetBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.compileSdkVersion = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.compileSdkType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.organization = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.appDetailAbilityLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.installSource = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.configuration = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); applicationInfo.iconResource = GenerateResource(fdp); applicationInfo.labelResource = GenerateResource(fdp); applicationInfo.descriptionResource = GenerateResource(fdp); applicationInfo.allowCommonEvent = GenerateStringArray(fdp); applicationInfo.assetAccessGroups = GenerateStringArray(fdp); // assign when calling the get interface applicationInfo.permissions = GenerateStringArray(fdp); applicationInfo.moduleSourceDirs = GenerateStringArray(fdp); // Installation-free applicationInfo.targetBundleList = GenerateStringArray(fdp); } void GenerateSignatureInfo(FuzzedDataProvider& fdp, SignatureInfo &signatureInfo) { signatureInfo.appId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); signatureInfo.fingerprint = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); signatureInfo.appIdentifier = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); signatureInfo.certificate = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); } template void GenerateAbilityInfo(FuzzedDataProvider& fdp, T &abilityInfo) { abilityInfo.visible = fdp.ConsumeBool(); abilityInfo.isLauncherAbility = fdp.ConsumeBool(); abilityInfo.isNativeAbility = fdp.ConsumeBool(); abilityInfo.enabled = fdp.ConsumeBool(); abilityInfo.supportPipMode = fdp.ConsumeBool(); abilityInfo.formEnabled = fdp.ConsumeBool(); abilityInfo.removeMissionAfterTerminate = fdp.ConsumeBool(); abilityInfo.isModuleJson = fdp.ConsumeBool(); abilityInfo.isStageBasedModel = fdp.ConsumeBool(); abilityInfo.continuable = fdp.ConsumeBool(); // whether to display in the missions list abilityInfo.excludeFromMissions = fdp.ConsumeBool(); abilityInfo.unclearableMission = fdp.ConsumeBool(); abilityInfo.excludeFromDock = fdp.ConsumeBool(); // whether to support recover UI interface abilityInfo.recoverable = fdp.ConsumeBool(); abilityInfo.isolationProcess = fdp.ConsumeBool(); abilityInfo.multiUserShared = fdp.ConsumeBool(); abilityInfo.grantPermission = fdp.ConsumeBool(); abilityInfo.directLaunch = fdp.ConsumeBool(); abilityInfo.linkType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); abilityInfo.labelId = fdp.ConsumeIntegral(); abilityInfo.descriptionId = fdp.ConsumeIntegral(); abilityInfo.iconId = fdp.ConsumeIntegral(); abilityInfo.orientationId = fdp.ConsumeIntegral(); abilityInfo.formEntity = fdp.ConsumeIntegral(); abilityInfo.backgroundModes = fdp.ConsumeIntegral(); abilityInfo.startWindowId = fdp.ConsumeIntegral(); abilityInfo.startWindowIconId = fdp.ConsumeIntegral(); abilityInfo.startWindowBackgroundId = fdp.ConsumeIntegral(); abilityInfo.maxWindowWidth = fdp.ConsumeIntegral(); abilityInfo.minWindowWidth = fdp.ConsumeIntegral(); abilityInfo.maxWindowHeight = fdp.ConsumeIntegral(); abilityInfo.minWindowHeight = fdp.ConsumeIntegral(); abilityInfo.packageSize = fdp.ConsumeIntegral(); abilityInfo.minFormHeight = fdp.ConsumeIntegral(); abilityInfo.defaultFormHeight = fdp.ConsumeIntegral(); abilityInfo.minFormWidth = fdp.ConsumeIntegral(); abilityInfo.defaultFormWidth = fdp.ConsumeIntegral(); abilityInfo.priority = fdp.ConsumeIntegral(); abilityInfo.appIndex = fdp.ConsumeIntegral(); abilityInfo.uid = fdp.ConsumeIntegral(); abilityInfo.type = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_FIVE)); abilityInfo.extensionAbilityType = static_cast(fdp.ConsumeIntegralInRange(0, EXTENSION_ABILITY_MAX)); abilityInfo.orientation = static_cast(fdp.ConsumeIntegralInRange(0, ORIENTATION_MAX)); abilityInfo.launchMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); abilityInfo.compileMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_ONE)); abilityInfo.subType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_ONE)); abilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // ability name, only the main class name abilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.theme = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.kind = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // ability category abilityInfo.extensionTypeName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.srcPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.srcLanguage = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.targetAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // set when install abilityInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // the "module.package" in config.json abilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // the "module.name" in config.json abilityInfo.applicationName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // the "bundlename" in config.json abilityInfo.codePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // ability main code path with name abilityInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // resource path for resource init abilityInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // configuration fields on startup page abilityInfo.startWindow = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.startWindowIcon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.startWindowBackground = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.preferMultiWindowOrientation = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.originalBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.appName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.privacyUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.privacyName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.downloadUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.className = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.originalClassName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.uriPermissionMode = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.uriPermissionPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.libPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); abilityInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); } void GenerateBundleInfo(FuzzedDataProvider& fdp, BundleInfo &bundleInfo) { bundleInfo.isNewVersion = fdp.ConsumeBool(); bundleInfo.isKeepAlive = fdp.ConsumeBool(); bundleInfo.singleton = fdp.ConsumeBool(); bundleInfo.isPreInstallApp = fdp.ConsumeBool(); bundleInfo.isNativeApp = fdp.ConsumeBool(); bundleInfo.entryInstallationFree = fdp.ConsumeBool(); bundleInfo.isDifferentName = fdp.ConsumeBool(); bundleInfo.versionCode = fdp.ConsumeIntegral(); bundleInfo.minCompatibleVersionCode = fdp.ConsumeIntegral(); bundleInfo.compatibleVersion = fdp.ConsumeIntegral(); bundleInfo.targetVersion = fdp.ConsumeIntegral(); bundleInfo.appIndex = fdp.ConsumeIntegral(); bundleInfo.minSdkVersion = fdp.ConsumeIntegral(); bundleInfo.maxSdkVersion = fdp.ConsumeIntegral(); bundleInfo.overlayType = fdp.ConsumeIntegralInRange(CODE_MIN_ONE, CODE_MAX_THREE); bundleInfo.uid = fdp.ConsumeIntegral(); bundleInfo.gid = fdp.ConsumeIntegral(); bundleInfo.installTime = fdp.ConsumeIntegral(); bundleInfo.updateTime = fdp.ConsumeIntegral(); bundleInfo.firstInstallTime = fdp.ConsumeIntegral(); bundleInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.vendor = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.releaseType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.mainEntry = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.entryModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.appId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.seInfo = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleInfo.jointUserId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); GenerateSignatureInfo(fdp, bundleInfo.signatureInfo); bundleInfo.oldAppIds = GenerateStringArray(fdp); bundleInfo.hapModuleNames = GenerateStringArray(fdp); // the "module.package" in each config.json bundleInfo.moduleNames = GenerateStringArray(fdp); // the "module.name" in each config.json bundleInfo.modulePublicDirs = GenerateStringArray(fdp); // the public paths of all modules of the application. bundleInfo.moduleDirs = GenerateStringArray(fdp); // the paths of all modules of the application. bundleInfo.moduleResPaths = GenerateStringArray(fdp); // the paths of all resources paths. bundleInfo.reqPermissions = GenerateStringArray(fdp); bundleInfo.defPermissions = GenerateStringArray(fdp); } void GenerateMap(FuzzedDataProvider& fdp, std::map &data) { // Generate number of key-value pairs (0 to 128) const size_t numPairs = fdp.ConsumeIntegralInRange(0, ARRAY_MAX_LENGTH); for (size_t i = 0; i < numPairs; ++i) { // Generate key with maximum length 128 const std::string key = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // Generate value with maximum length 128 const std::string value = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // Insert into map (allow overwriting existing keys) data[key] = value; } } void GenerateDeviceFeatureMap(FuzzedDataProvider& fdp, std::map> &data) { // Generate number of key-value pairs (0 to 128) const size_t numPairs = fdp.ConsumeIntegralInRange(0, ARRAY_MAX_LENGTH); for (size_t i = 0; i < numPairs; ++i) { // Generate key with maximum length 128 const std::string key = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // Generate vector value const std::vector value = GenerateStringArray(fdp); // Insert into map (allow overwriting existing keys) data[key] = value; } } void GenerateInstallParam(FuzzedDataProvider& fdp, InstallParam &installParam) { installParam.isKeepData = fdp.ConsumeBool(); installParam.needSavePreInstallInfo = fdp.ConsumeBool(); installParam.isPreInstallApp = fdp.ConsumeBool(); installParam.removable = fdp.ConsumeBool(); // whether need copy hap to install path installParam.copyHapToInstallPath = fdp.ConsumeBool(); // is aging Cause uninstall. installParam.isAgingUninstall = fdp.ConsumeBool(); installParam.needSendEvent = fdp.ConsumeBool(); installParam.withCopyHaps = fdp.ConsumeBool(); // for MDM self update installParam.isSelfUpdate = fdp.ConsumeBool(); // is shell token installParam.isCallByShell = fdp.ConsumeBool(); // for AOT installParam.isOTA = fdp.ConsumeBool(); installParam.concentrateSendEvent = fdp.ConsumeBool(); installParam.isRemoveUser = fdp.ConsumeBool(); installParam.allUser = fdp.ConsumeBool(); installParam.isPatch = fdp.ConsumeBool(); installParam.isDataPreloadHap = fdp.ConsumeBool(); installParam.userId = fdp.ConsumeIntegral(); installParam.installFlag = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_ONE)); installParam.installLocation = static_cast(fdp.ConsumeIntegralInRange(CODE_MIN_ONE, CODE_MAX_TWO)); installParam.installBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.installEnterpriseBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.installEtpNormalBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.installEtpMdmBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.installInternaltestingBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.installUpdateSelfBundlePermissionStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); installParam.preinstallSourceFlag = static_cast(fdp.ConsumeIntegral()); installParam.crowdtestDeadline = fdp.ConsumeIntegral(); // for crowdtesting type hap // Indicates the distribution type installParam.specifiedDistributionType = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // Indicates the additional Info installParam.additionalInfo = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); installParam.appIdentifier = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // shared bundle directory paths installParam.sharedBundleDirPaths = GenerateStringArray(fdp); GenerateMap(fdp, installParam.parameters); GenerateMap(fdp, installParam.pgoParams); GenerateMap(fdp, installParam.hashParams); GenerateMap(fdp, installParam.verifyCodeParams); } void GenerateInstallPluginParam(FuzzedDataProvider& fdp, InstallPluginParam &installPluginParam) { installPluginParam.userId = fdp.ConsumeIntegral(); GenerateMap(fdp, installPluginParam.parameters); } void GenerateBundleUserInfo(FuzzedDataProvider& fdp, BundleUserInfo &bundleUserInfo) { bundleUserInfo.enabled = fdp.ConsumeBool(); bundleUserInfo.userId = fdp.ConsumeIntegral(); bundleUserInfo.setEnabledCaller = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); bundleUserInfo.disabledAbilities = GenerateStringArray(fdp); bundleUserInfo.overlayModulesState = GenerateStringArray(fdp); } void GenerateCompatibleApplicationInfo(FuzzedDataProvider& fdp, CompatibleApplicationInfo &compatibleApplicationInfo) { compatibleApplicationInfo.isCompressNativeLibs = fdp.ConsumeBool(); compatibleApplicationInfo.systemApp = fdp.ConsumeBool(); compatibleApplicationInfo.enabled = fdp.ConsumeBool(); compatibleApplicationInfo.debug = fdp.ConsumeBool(); compatibleApplicationInfo.iconId = fdp.ConsumeIntegral(); compatibleApplicationInfo.labelId = fdp.ConsumeIntegral(); compatibleApplicationInfo.descriptionId = fdp.ConsumeIntegral(); compatibleApplicationInfo.supportedModes = fdp.ConsumeIntegral(); // supported modes. // items set when installing. compatibleApplicationInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleApplicationInfo.permissions = GenerateStringArray(fdp); } void GenerateCompatibleAbilityInfo(FuzzedDataProvider& fdp, CompatibleAbilityInfo &compatibleAbilityInfo) { compatibleAbilityInfo.visible = fdp.ConsumeBool(); compatibleAbilityInfo.formEnabled = fdp.ConsumeBool(); compatibleAbilityInfo.multiUserShared = fdp.ConsumeBool(); compatibleAbilityInfo.supportPipMode = fdp.ConsumeBool(); compatibleAbilityInfo.grantPermission = fdp.ConsumeBool(); compatibleAbilityInfo.directLaunch = fdp.ConsumeBool(); compatibleAbilityInfo.enabled = fdp.ConsumeBool(); compatibleAbilityInfo.backgroundModes = fdp.ConsumeIntegral(); compatibleAbilityInfo.packageSize = fdp.ConsumeIntegral(); // form widget info compatibleAbilityInfo.formEntity = 1; // where form can be displayed compatibleAbilityInfo.iconId = fdp.ConsumeIntegral(); compatibleAbilityInfo.labelId = fdp.ConsumeIntegral(); compatibleAbilityInfo.descriptionId = fdp.ConsumeIntegral(); compatibleAbilityInfo.minFormHeight = fdp.ConsumeIntegral(); // minimum height of ability. compatibleAbilityInfo.defaultFormHeight = fdp.ConsumeIntegral(); // default height of ability. compatibleAbilityInfo.minFormWidth = fdp.ConsumeIntegral(); // minimum width of ability. compatibleAbilityInfo.defaultFormWidth = fdp.ConsumeIntegral(); // default width of ability. // deprecated: remove this field in new package format. compatibleAbilityInfo.type = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_FIVE)); compatibleAbilityInfo.subType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_ONE)); compatibleAbilityInfo.orientation = static_cast(fdp.ConsumeIntegralInRange(0, ORIENTATION_MAX)); compatibleAbilityInfo.launchMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); // deprecated: ability code class simple name, use 'className' instead. compatibleAbilityInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // display name on screen. compatibleAbilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // used as icon data (base64) for WEB Ability. compatibleAbilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // uri of ability. compatibleAbilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // indicates the name of the .hap package to which the capability belongs. compatibleAbilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.targetAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.appName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.privacyUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.privacyName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.downloadUrl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.versionName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.uriPermissionMode = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.uriPermissionPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // set when install compatibleAbilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.className = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.originalClassName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.deviceId = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); compatibleAbilityInfo.permissions = GenerateStringArray(fdp); compatibleAbilityInfo.deviceTypes = GenerateStringArray(fdp); compatibleAbilityInfo.deviceCapabilities = GenerateStringArray(fdp); GenerateCompatibleApplicationInfo(fdp, compatibleAbilityInfo.applicationInfo); } void GenerateExtensionAbilityInfo(FuzzedDataProvider& fdp, ExtensionAbilityInfo &extensionAbilityInfo) { extensionAbilityInfo.visible = fdp.ConsumeBool(); // set when install extensionAbilityInfo.enabled = fdp.ConsumeBool(); extensionAbilityInfo.needCreateSandbox = fdp.ConsumeBool(); extensionAbilityInfo.iconId = fdp.ConsumeIntegral(); extensionAbilityInfo.labelId = fdp.ConsumeIntegral(); extensionAbilityInfo.descriptionId = fdp.ConsumeIntegral(); extensionAbilityInfo.priority = fdp.ConsumeIntegral(); // for NAPI, save self query cache extensionAbilityInfo.uid = fdp.ConsumeIntegral(); extensionAbilityInfo.appIndex = fdp.ConsumeIntegral(); extensionAbilityInfo.type = static_cast(fdp.ConsumeIntegralInRange(0, ARRAY_MAX_LENGTH)); extensionAbilityInfo.compileMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MIN_ONE)); extensionAbilityInfo.extensionProcessMode = static_cast(fdp.ConsumeIntegralInRange(-1, CODE_MAX_THREE)); extensionAbilityInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.readPermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.writePermission = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.uri = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.extensionTypeName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); extensionAbilityInfo.customProcess = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); std::vector permissions = GenerateStringArray(fdp); std::vector appIdentifierAllowList = GenerateStringArray(fdp); std::vector dataGroupIds = GenerateStringArray(fdp); std::vector validDataGroupIds = GenerateStringArray(fdp); GenerateApplicationInfo(fdp, extensionAbilityInfo.applicationInfo); } void GenerateFormInfo(FuzzedDataProvider& fdp, FormInfo &formInfo) { formInfo.defaultFlag = fdp.ConsumeBool(); formInfo.formVisibleNotify = fdp.ConsumeBool(); formInfo.updateEnabled = fdp.ConsumeBool(); formInfo.isStatic = fdp.ConsumeBool(); formInfo.dataProxyEnabled = fdp.ConsumeBool(); formInfo.isDynamic = fdp.ConsumeBool(); formInfo.transparencyEnabled = fdp.ConsumeBool(); formInfo.fontScaleFollowSystem = fdp.ConsumeBool(); formInfo.enableBlurBackground = fdp.ConsumeBool(); formInfo.appFormVisibleNotify = fdp.ConsumeBool(); formInfo.colorMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MIN_ONE)); formInfo.renderingMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); formInfo.displayNameId = fdp.ConsumeIntegral(); formInfo.descriptionId = fdp.ConsumeIntegral(); formInfo.versionCode = fdp.ConsumeIntegral(); formInfo.updateDuration = fdp.ConsumeIntegral(); formInfo.defaultDimension = fdp.ConsumeIntegral(); formInfo.privacyLevel = fdp.ConsumeIntegral(); formInfo.type = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); formInfo.uiSyntax = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_TWO)); formInfo.bundleType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_FOUR)); formInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.originalBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.relatedBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // the "module.distro.moduleName" in config.json formInfo.abilityName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.displayName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.jsComponentName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.deepLink = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.formConfigAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.scheduledUpdateTime = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.multiScheduledUpdateTime = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); formInfo.src = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); } void GenerateShortcutInfo(FuzzedDataProvider& fdp, ShortcutInfo &shortcutInfo) { shortcutInfo.isStatic = fdp.ConsumeBool(); shortcutInfo.isHomeShortcut = fdp.ConsumeBool(); shortcutInfo.isEnables = fdp.ConsumeBool(); shortcutInfo.visible = fdp.ConsumeBool(); shortcutInfo.iconId = fdp.ConsumeIntegral(); shortcutInfo.labelId = fdp.ConsumeIntegral(); shortcutInfo.appIndex = fdp.ConsumeIntegral(); shortcutInfo.sourceType = fdp.ConsumeIntegral(); shortcutInfo.id = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.hostAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.icon = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); shortcutInfo.disableMessage = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); } int32_t GenerateRandomUser(FuzzedDataProvider& fdp) { uint8_t size = USERS.size(); if (size == 0) { return Constants::START_USERID; // No users available, return 100 } uint8_t index = fdp.ConsumeIntegralInRange(0, size) % size; // 0 to size-1 return USERS[index]; } void GenerateHapModuleInfo(FuzzedDataProvider& fdp, HapModuleInfo &hapModuleInfo) { hapModuleInfo.compressNativeLibs = fdp.ConsumeBool(); hapModuleInfo.isLibIsolated = fdp.ConsumeBool(); hapModuleInfo.deliveryWithInstall = fdp.ConsumeBool(); hapModuleInfo.installationFree = fdp.ConsumeBool(); hapModuleInfo.isModuleJson = fdp.ConsumeBool(); hapModuleInfo.isStageBasedModel = fdp.ConsumeBool(); hapModuleInfo.hasIntent = fdp.ConsumeBool(); hapModuleInfo.resizeable = fdp.ConsumeBool(); hapModuleInfo.descriptionId = fdp.ConsumeIntegral(); hapModuleInfo.iconId = fdp.ConsumeIntegral(); hapModuleInfo.labelId = fdp.ConsumeIntegral(); hapModuleInfo.upgradeFlag = fdp.ConsumeIntegral(); hapModuleInfo.supportedModes = fdp.ConsumeIntegral(); hapModuleInfo.colorMode = static_cast(fdp.ConsumeIntegralInRange(MINUS_ONE, CODE_MAX_ONE)); hapModuleInfo.moduleType = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_THREE)); hapModuleInfo.compileMode = fdp.ConsumeBool() ? CompileMode::ES_MODULE : CompileMode::JS_BUNDLE; hapModuleInfo.aotCompileStatus = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_FOUR)); hapModuleInfo.isolationMode = static_cast(fdp.ConsumeIntegralInRange(0, CODE_MAX_THREE)); hapModuleInfo.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // module.name in config.json hapModuleInfo.package = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.description = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.iconPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.label = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.backgroundImg = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.mainAbility = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.srcPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.hashValue = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.hapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.nativeLibraryPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.cpuAbi = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); // new version fields hapModuleInfo.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.mainElementName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.pages = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.systemTheme = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.process = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.resourcePath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.srcEntrance = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.uiSyntax = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.virtualMachine = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.moduleSourceDir = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.buildHash = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.fileContextMenu = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.routerMap = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.packageName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.abilitySrcEntryDelegator = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.abilityStageSrcEntryDelegator = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.appStartup = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); hapModuleInfo.nativeLibraryFileNames = GenerateStringArray(fdp); hapModuleInfo.reqCapabilities = GenerateStringArray(fdp); hapModuleInfo.deviceTypes = GenerateStringArray(fdp); GenerateDeviceFeatureMap(fdp, hapModuleInfo.requiredDeviceFeatures); } } // namespace BMSFuzzTestUtil } // namespace AppExecFwk } // namespace OHOS #endif // BMS_FUZZTEST_UTIL_H