• 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 #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 }