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 #define private public
17 #include <cstddef>
18 #include <cstdint>
19 #include <fuzzer/FuzzedDataProvider.h>
20
21 #include "bmsnavigation_fuzzer.h"
22 #include "bms_fuzztest_util.h"
23
24 #include "router_data_storage_rdb.h"
25 #include "router_item_compare.h"
26 #include "router_map_helper.h"
27 #include "securec.h"
28 #include "sem_ver.h"
29
30 using namespace OHOS::AppExecFwk;
31 using namespace OHOS::AppExecFwk::BMSFuzzTestUtil;
32 namespace OHOS {
GenerateRouterItem(FuzzedDataProvider & fdp,RouterItem & routerItem)33 void GenerateRouterItem(FuzzedDataProvider &fdp, RouterItem &routerItem)
34 {
35 routerItem.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
36 routerItem.pageSourceFile = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
37 routerItem.buildFunction = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
38 routerItem.customData = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
39 routerItem.ohmurl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
40 routerItem.bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
41 routerItem.moduleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
42 GenerateMap(fdp, routerItem.data);
43 }
44
ProduceSemVerList(std::vector<SemVer> & semVerList)45 void ProduceSemVerList(std::vector<SemVer> &semVerList)
46 {
47 semVerList.emplace_back(SemVer("1.2.0"));
48 semVerList.emplace_back(SemVer("1.2.1"));
49 semVerList.emplace_back(SemVer("1.2.2"));
50 semVerList.emplace_back(SemVer("2.2.2"));
51 semVerList.emplace_back(SemVer("1.2.0-release.1"));
52 semVerList.emplace_back(SemVer("2.2.2-beta1"));
53 semVerList.emplace_back(SemVer("1.1.1-release.1"));
54 semVerList.emplace_back(SemVer("1.2.0-release"));
55 semVerList.emplace_back(SemVer("1.2.1-beta1"));
56 semVerList.emplace_back(SemVer("01.2.0"));
57 semVerList.emplace_back(SemVer("1.02.0"));
58 semVerList.emplace_back(SemVer("a01.2.3"));
59 semVerList.emplace_back(SemVer("1.2.3"));
60 semVerList.emplace_back(SemVer("1.abc.3"));
61 semVerList.emplace_back(SemVer("1.2.b03"));
62 semVerList.emplace_back(SemVer("abc.2.3"));
63 semVerList.emplace_back(SemVer("bcd.2.3"));
64 }
65
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)66 bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
67 {
68 FuzzedDataProvider fdp(data, size);
69 RouterDataStorageRdb routerDataStorageRdb;
70 std::string bundleName;
71 std::string moduleName;
72 std::vector<RouterItem> routerInfos;
73 std::set<std::string> bundleNames;
74 std::map<std::string, std::string> routerInfoMap;
75 routerDataStorageRdb.UpdateRouterInfo(bundleName, routerInfoMap);
76 bundleName = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
77 GenerateMap(fdp, routerInfoMap);
78 routerDataStorageRdb.UpdateRouterInfo(bundleName, routerInfoMap);
79
80 routerDataStorageRdb.rdbDataManager_ = nullptr;
81 routerDataStorageRdb.UpdateRouterInfo(bundleName, routerInfoMap);
82 routerDataStorageRdb.GetRouterInfo(bundleName, moduleName, routerInfos);
83 routerDataStorageRdb.GetAllBundleNames(bundleNames);
84 routerDataStorageRdb.DeleteRouterInfo(bundleName);
85 routerDataStorageRdb.DeleteRouterInfo(bundleName, moduleName);
86
87 BundleInfo bundleInfo;
88 GenerateBundleInfo(fdp, bundleInfo);
89 HapModuleInfo hapModuleInfo1;
90 hapModuleInfo1.name = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
91 hapModuleInfo1.moduleType = ModuleType::ENTRY;
92 hapModuleInfo1.routerArray.emplace_back(RouterItem());
93 RouterMapHelper::MergeRouter(bundleInfo);
94 bundleInfo.hapModuleInfos.emplace_back(hapModuleInfo1);
95 RouterMapHelper::MergeRouter(bundleInfo);
96 std::string ohmurl = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
97 RouterMapHelper::ExtractVersionFromOhmurl(ohmurl);
98 ohmurl += "&";
99 RouterMapHelper::ExtractVersionFromOhmurl(ohmurl);
100
101 std::vector<RouterItem> routerArrayList;
102 RouterItem routerItem1;
103 GenerateRouterItem(fdp, routerItem1);
104 routerArrayList.emplace_back(routerItem1);
105 std::vector<RouterItem> routerArray;
106 std::set<std::string> moduleNameSet;
107 RouterMapHelper::MergeRouter(routerArrayList, routerArray, moduleNameSet);
108
109 std::string semRandom = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH);
110 SemVer fuzzSem(semRandom);
111 SemVer semVer("");
112 std::vector<SemVer> semVerList;
113 ProduceSemVerList(semVerList);
114 for (size_t i = 0; i < semVerList.size(); i++) {
115 for (size_t j = i + 1; j < semVerList.size(); j++) {
116 RouterMapHelper::CompareMain(semVerList[i], semVerList[j]);
117 RouterMapHelper::ComparePre(semVerList[i], semVerList[j]);
118 RouterMapHelper::Compare(semVerList[i], semVerList[j]);
119 }
120 }
121 return true;
122 }
123 }
124
125 // Fuzzer entry point.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)126 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
127 {
128 /* Run your code on data */
129 OHOS::DoSomethingInterestingWithMyAPI(data, size);
130 return 0;
131 }
132