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