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 #include "bmsbundleoverlay_fuzzer.h"
17 #include <string>
18
19 #define private public
20 #include <cstddef>
21 #include <cstdint>
22 #include <fuzzer/FuzzedDataProvider.h>
23
24 #include "bms_fuzztest_util.h"
25 #include "bundle_overlay_data_manager.h"
26 #include "bundle_overlay_install_checker.h"
27 #include "bundle_overlay_manager.h"
28 #include "bundle_overlay_manager_host_impl.h"
29
30 using namespace OHOS::AppExecFwk;
31 using namespace OHOS::AppExecFwk::BMSFuzzTestUtil;
32 namespace OHOS {
33
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)34 bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
35 {
36 FuzzedDataProvider fdp(data, size);
37 // bundle_overlay_manager.cpp
38 std::string bundleName;
39 std::string moduleName;
40 bool isEnabled = fdp.ConsumeBool();
41 int32_t userId = fdp.ConsumeIntegral<int32_t>();
42 BundleOverlayManager::GetInstance()->IsExistedNonOverlayHap(bundleName);
43 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
44 BundleOverlayManager::GetInstance()->IsExistedNonOverlayHap(bundleName);
45 BundleOverlayManager::GetInstance()->SetOverlayEnabled(bundleName, moduleName, isEnabled, userId);
46 InnerBundleInfo info;
47 BundleOverlayManager::GetInstance()->GetInnerBundleInfo(bundleName, info);
48 std::vector<OverlayModuleInfo> overlayModuleInfos;
49 OverlayModuleInfo overlayModuleInfo;
50 BundleOverlayManager::GetInstance()->GetAllOverlayModuleInfo(bundleName, overlayModuleInfos, userId);
51 BundleOverlayManager::GetInstance()->GetOverlayModuleInfo(bundleName, moduleName, overlayModuleInfo, userId);
52 moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
53 BundleOverlayManager::GetInstance()->GetOverlayModuleInfo(bundleName, moduleName, overlayModuleInfo, userId);
54 BundleOverlayManager::GetInstance()->SetOverlayEnabled(bundleName, moduleName, isEnabled, userId);
55 std::string targetBundleName;
56 std::string targetModuleName;
57 BundleOverlayManager::GetInstance()->GetOverlayModuleInfoForTarget(targetBundleName, targetModuleName, overlayModuleInfos, userId);
58 targetBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
59 targetModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
60 BundleOverlayManager::GetInstance()->GetOverlayModuleInfoForTarget(targetBundleName, targetModuleName, overlayModuleInfos, userId);
61
62 // bundle_overlay_data_manager.cpp
63 bundleName = "";
64 OverlayDataMgr::GetInstance()->IsExistedNonOverlayHap(bundleName);
65 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
66 OverlayDataMgr::GetInstance()->IsExistedNonOverlayHap(bundleName);
67 InnerBundleInfo oldInfo;
68 OverlayDataMgr::GetInstance()->BuildInternalOverlayConnection(moduleName, oldInfo, userId);
69 std::string moduleHapPath = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
70 std::string bundleDir;
71 OverlayDataMgr::GetInstance()->GetBundleDir(moduleHapPath, bundleDir);
72
73 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
74 InnerBundleInfo targetInnerBundleInfo;
75 OverlayDataMgr::GetInstance()->RemoveOverlayBundleInfo(moduleHapPath, info);
76 OverlayDataMgr::GetInstance()->QueryOverlayInnerBundleInfo(bundleName, info);
77 overlayModuleInfos.clear();
78 OverlayDataMgr::GetInstance()->GetAllOverlayModuleInfo(bundleName, overlayModuleInfos, userId);
79 OverlayDataMgr::GetInstance()->GetOverlayModuleInfo(bundleName, moduleName, overlayModuleInfo, userId);
80 std::vector<OverlayBundleInfo> overlayBundleInfos;
81 OverlayDataMgr::GetInstance()->GetOverlayBundleInfoForTarget(targetBundleName, overlayBundleInfos, userId);
82 OverlayDataMgr::GetInstance()->GetOverlayModuleInfoForTarget(targetBundleName, targetModuleName, overlayModuleInfos, userId);
83 OverlayDataMgr::GetInstance()->SetOverlayEnabled(bundleName, moduleName, isEnabled, userId);
84
85 // bundle_overlay_install_checker.cpp
86 BundleOverlayInstallChecker checker;
87 int32_t priority = fdp.ConsumeIntegral<int32_t>();
88 checker.CheckTargetPriority(priority);
89 targetBundleName = "";
90 targetModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
91 std::string fingerprint = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
92 userId = fdp.ConsumeIntegral<int32_t>();
93 checker.CheckTargetBundle(targetBundleName, targetModuleName, fingerprint, userId);
94 checker.CheckTargetModule(targetBundleName, targetModuleName);
95 targetBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
96 checker.CheckTargetBundle(targetBundleName, targetModuleName, fingerprint, userId);
97 checker.CheckTargetModule(targetBundleName, targetModuleName);
98
99 // bundle_overlay_manager_host_impl.cpp
100 OverlayManagerHostImpl hostImpl;
101 bundleName = "";
102 overlayModuleInfos.clear();
103 hostImpl.GetAllOverlayModuleInfo(bundleName, overlayModuleInfos, userId);
104 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
105 hostImpl.GetAllOverlayModuleInfo(bundleName, overlayModuleInfos, userId);
106 moduleName = "";
107 hostImpl.GetOverlayModuleInfo(bundleName, moduleName, overlayModuleInfo, userId);
108 hostImpl.GetOverlayModuleInfo(moduleName, overlayModuleInfo, userId);
109 moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
110 hostImpl.GetOverlayModuleInfo(bundleName, moduleName, overlayModuleInfo, userId);
111 hostImpl.GetOverlayModuleInfo(moduleName, overlayModuleInfo, userId);
112 targetModuleName = "";
113 hostImpl.GetTargetOverlayModuleInfo(targetModuleName, overlayModuleInfos, userId);
114 targetModuleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
115 hostImpl.GetTargetOverlayModuleInfo(targetModuleName, overlayModuleInfos, userId);
116 bundleName = "";
117 targetBundleName = "";
118 hostImpl.GetOverlayModuleInfoByBundleName(bundleName, moduleName, overlayModuleInfos, userId);
119 hostImpl.GetOverlayBundleInfoForTarget(targetBundleName, overlayBundleInfos, userId);
120 hostImpl.GetOverlayModuleInfoForTarget(targetBundleName, targetModuleName, overlayModuleInfos, userId);
121 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
122 targetBundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
123 hostImpl.GetOverlayModuleInfoByBundleName(bundleName, moduleName, overlayModuleInfos, userId);
124 hostImpl.GetOverlayBundleInfoForTarget(targetBundleName, overlayBundleInfos, userId);
125 hostImpl.GetOverlayModuleInfoForTarget(targetBundleName, targetModuleName, overlayModuleInfos, userId);
126 moduleName = "";
127 hostImpl.SetOverlayEnabledForSelf(moduleName, isEnabled, userId);
128 hostImpl.SetOverlayEnabled(bundleName, moduleName, isEnabled, userId);
129 moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
130 hostImpl.SetOverlayEnabledForSelf(moduleName, isEnabled, userId);
131 hostImpl.SetOverlayEnabled(bundleName, moduleName, isEnabled, userId);
132 return true;
133 }
134 }
135
136 // Fuzzer entry point.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)137 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
138 {
139 OHOS::DoSomethingInterestingWithMyAPI(data, size);
140 return 0;
141 }