• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "formbmshelper_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 
21 #define private public
22 #define protected public
23 #include "bms_mgr/form_bms_helper.h"
24 #undef private
25 #undef protected
26 #include "securec.h"
27 
28 using namespace OHOS::AppExecFwk;
29 
30 namespace OHOS {
31 constexpr size_t U32_AT_SIZE = 4;
GetU32Data(const char * ptr)32 uint32_t GetU32Data(const char* ptr)
33 {
34     // convert fuzz input data to an integer
35     return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];
36 }
DoSomethingInterestingWithMyAPI(const char * data,size_t size)37 bool DoSomethingInterestingWithMyAPI(const char* data, size_t size)
38 {
39     FormBmsHelper formBmsHelper;
40     sptr<IBundleMgr> bundleManager = nullptr;
41     formBmsHelper.SetBundleManager(bundleManager);
42     std::string bundleName(data, size);
43     std::string moduleName(data, size);
44     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
45     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
46     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
47     int32_t userId = static_cast<int32_t>(GetU32Data(data));
48     BundleInfo bundleInfo;
49     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
50     formBmsHelper.GetUidByBundleName(bundleName, userId);
51     return true;
52 }
53 
DoSomethingInterestingWithMyAPI1(const char * data,size_t size)54 bool DoSomethingInterestingWithMyAPI1(const char* data, size_t size)
55 {
56     FormBmsHelper formBmsHelper;
57     sptr<IBundleMgr> bundleManager = nullptr;
58     formBmsHelper.SetBundleManager(bundleManager);
59     std::string bundleName(data, size);
60     std::string moduleName(data, size);
61     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
62     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
63     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
64     int32_t userId = static_cast<int32_t>(GetU32Data(data));
65     BundleInfo bundleInfo;
66     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
67     formBmsHelper.GetUidByBundleName(bundleName, userId);
68     return true;
69 }
70 
DoSomethingInterestingWithMyAPI2(const char * data,size_t size)71 bool DoSomethingInterestingWithMyAPI2(const char* data, size_t size)
72 {
73     FormBmsHelper formBmsHelper;
74     sptr<IBundleMgr> bundleManager = nullptr;
75     formBmsHelper.SetBundleManager(bundleManager);
76     std::string bundleName(data, size);
77     std::string moduleName(data, size);
78     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
79     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
80     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
81     int32_t userId = static_cast<int32_t>(GetU32Data(data));
82     BundleInfo bundleInfo;
83     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
84     formBmsHelper.GetUidByBundleName(bundleName, userId);
85     return true;
86 }
87 
DoSomethingInterestingWithMyAPI3(const char * data,size_t size)88 bool DoSomethingInterestingWithMyAPI3(const char* data, size_t size)
89 {
90     FormBmsHelper formBmsHelper;
91     sptr<IBundleMgr> bundleManager = nullptr;
92     formBmsHelper.SetBundleManager(bundleManager);
93     std::string bundleName(data, size);
94     std::string moduleName(data, size);
95     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
96     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
97     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
98     int32_t userId = static_cast<int32_t>(GetU32Data(data));
99     BundleInfo bundleInfo;
100     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
101     formBmsHelper.GetUidByBundleName(bundleName, userId);
102     return true;
103 }
104 
DoSomethingInterestingWithMyAPI4(const char * data,size_t size)105 bool DoSomethingInterestingWithMyAPI4(const char* data, size_t size)
106 {
107     FormBmsHelper formBmsHelper;
108     sptr<IBundleMgr> bundleManager = nullptr;
109     formBmsHelper.SetBundleManager(bundleManager);
110     std::string bundleName(data, size);
111     std::string moduleName(data, size);
112     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
113     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
114     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
115     int32_t userId = static_cast<int32_t>(GetU32Data(data));
116     BundleInfo bundleInfo;
117     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
118     formBmsHelper.GetUidByBundleName(bundleName, userId);
119     return true;
120 }
121 
DoSomethingInterestingWithMyAPI5(const char * data,size_t size)122 bool DoSomethingInterestingWithMyAPI5(const char* data, size_t size)
123 {
124     FormBmsHelper formBmsHelper;
125     sptr<IBundleMgr> bundleManager = nullptr;
126     formBmsHelper.SetBundleManager(bundleManager);
127     std::string bundleName(data, size);
128     std::string moduleName(data, size);
129     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
130     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
131     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
132     int32_t userId = static_cast<int32_t>(GetU32Data(data));
133     BundleInfo bundleInfo;
134     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
135     formBmsHelper.GetUidByBundleName(bundleName, userId);
136     return true;
137 }
138 
DoSomethingInterestingWithMyAPI6(const char * data,size_t size)139 bool DoSomethingInterestingWithMyAPI6(const char* data, size_t size)
140 {
141     FormBmsHelper formBmsHelper;
142     sptr<IBundleMgr> bundleManager = nullptr;
143     formBmsHelper.SetBundleManager(bundleManager);
144     std::string bundleName(data, size);
145     std::string moduleName(data, size);
146     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
147     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
148     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
149     int32_t userId = static_cast<int32_t>(GetU32Data(data));
150     BundleInfo bundleInfo;
151     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
152     formBmsHelper.GetUidByBundleName(bundleName, userId);
153     return true;
154 }
155 
DoSomethingInterestingWithMyAPI7(const char * data,size_t size)156 bool DoSomethingInterestingWithMyAPI7(const char* data, size_t size)
157 {
158     FormBmsHelper formBmsHelper;
159     sptr<IBundleMgr> bundleManager = nullptr;
160     formBmsHelper.SetBundleManager(bundleManager);
161     std::string bundleName(data, size);
162     std::string moduleName(data, size);
163     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
164     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
165     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
166     int32_t userId = static_cast<int32_t>(GetU32Data(data));
167     BundleInfo bundleInfo;
168     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
169     formBmsHelper.GetUidByBundleName(bundleName, userId);
170     return true;
171 }
172 
DoSomethingInterestingWithMyAPI8(const char * data,size_t size)173 bool DoSomethingInterestingWithMyAPI8(const char* data, size_t size)
174 {
175     FormBmsHelper formBmsHelper;
176     sptr<IBundleMgr> bundleManager = nullptr;
177     formBmsHelper.SetBundleManager(bundleManager);
178     std::string bundleName(data, size);
179     std::string moduleName(data, size);
180     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
181     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
182     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
183     int32_t userId = static_cast<int32_t>(GetU32Data(data));
184     BundleInfo bundleInfo;
185     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
186     formBmsHelper.GetUidByBundleName(bundleName, userId);
187     return true;
188 }
189 
DoSomethingInterestingWithMyAPI9(const char * data,size_t size)190 bool DoSomethingInterestingWithMyAPI9(const char* data, size_t size)
191 {
192     FormBmsHelper formBmsHelper;
193     sptr<IBundleMgr> bundleManager = nullptr;
194     formBmsHelper.SetBundleManager(bundleManager);
195     std::string bundleName(data, size);
196     std::string moduleName(data, size);
197     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
198     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
199     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
200     int32_t userId = static_cast<int32_t>(GetU32Data(data));
201     BundleInfo bundleInfo;
202     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
203     formBmsHelper.GetUidByBundleName(bundleName, userId);
204     return true;
205 }
206 
DoSomethingInterestingWithMyAPI10(const char * data,size_t size)207 bool DoSomethingInterestingWithMyAPI10(const char* data, size_t size)
208 {
209     FormBmsHelper formBmsHelper;
210     sptr<IBundleMgr> bundleManager = nullptr;
211     formBmsHelper.SetBundleManager(bundleManager);
212     std::string bundleName(data, size);
213     std::string moduleName(data, size);
214     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
215     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
216     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
217     int32_t userId = static_cast<int32_t>(GetU32Data(data));
218     BundleInfo bundleInfo;
219     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
220     formBmsHelper.GetUidByBundleName(bundleName, userId);
221     return true;
222 }
223 
DoSomethingInterestingWithMyAPI11(const char * data,size_t size)224 bool DoSomethingInterestingWithMyAPI11(const char* data, size_t size)
225 {
226     FormBmsHelper formBmsHelper;
227     sptr<IBundleMgr> bundleManager = nullptr;
228     formBmsHelper.SetBundleManager(bundleManager);
229     std::string bundleName(data, size);
230     std::string moduleName(data, size);
231     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
232     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
233     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
234     int32_t userId = static_cast<int32_t>(GetU32Data(data));
235     BundleInfo bundleInfo;
236     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
237     formBmsHelper.GetUidByBundleName(bundleName, userId);
238     return true;
239 }
240 
DoSomethingInterestingWithMyAPI12(const char * data,size_t size)241 bool DoSomethingInterestingWithMyAPI12(const char* data, size_t size)
242 {
243     FormBmsHelper formBmsHelper;
244     sptr<IBundleMgr> bundleManager = nullptr;
245     formBmsHelper.SetBundleManager(bundleManager);
246     std::string bundleName(data, size);
247     std::string moduleName(data, size);
248     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
249     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
250     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
251     int32_t userId = static_cast<int32_t>(GetU32Data(data));
252     BundleInfo bundleInfo;
253     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
254     formBmsHelper.GetUidByBundleName(bundleName, userId);
255     return true;
256 }
257 
DoSomethingInterestingWithMyAPI13(const char * data,size_t size)258 bool DoSomethingInterestingWithMyAPI13(const char* data, size_t size)
259 {
260     FormBmsHelper formBmsHelper;
261     sptr<IBundleMgr> bundleManager = nullptr;
262     formBmsHelper.SetBundleManager(bundleManager);
263     std::string bundleName(data, size);
264     std::string moduleName(data, size);
265     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
266     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
267     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
268     int32_t userId = static_cast<int32_t>(GetU32Data(data));
269     BundleInfo bundleInfo;
270     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
271     formBmsHelper.GetUidByBundleName(bundleName, userId);
272     return true;
273 }
274 
DoSomethingInterestingWithMyAPI14(const char * data,size_t size)275 bool DoSomethingInterestingWithMyAPI14(const char* data, size_t size)
276 {
277     FormBmsHelper formBmsHelper;
278     sptr<IBundleMgr> bundleManager = nullptr;
279     formBmsHelper.SetBundleManager(bundleManager);
280     std::string bundleName(data, size);
281     std::string moduleName(data, size);
282     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
283     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
284     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
285     int32_t userId = static_cast<int32_t>(GetU32Data(data));
286     BundleInfo bundleInfo;
287     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
288     formBmsHelper.GetUidByBundleName(bundleName, userId);
289     return true;
290 }
291 
DoSomethingInterestingWithMyAPI15(const char * data,size_t size)292 bool DoSomethingInterestingWithMyAPI15(const char* data, size_t size)
293 {
294     FormBmsHelper formBmsHelper;
295     sptr<IBundleMgr> bundleManager = nullptr;
296     formBmsHelper.SetBundleManager(bundleManager);
297     std::string bundleName(data, size);
298     std::string moduleName(data, size);
299     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
300     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
301     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
302     int32_t userId = static_cast<int32_t>(GetU32Data(data));
303     BundleInfo bundleInfo;
304     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
305     formBmsHelper.GetUidByBundleName(bundleName, userId);
306     return true;
307 }
308 
DoSomethingInterestingWithMyAPI16(const char * data,size_t size)309 bool DoSomethingInterestingWithMyAPI16(const char* data, size_t size)
310 {
311     FormBmsHelper formBmsHelper;
312     sptr<IBundleMgr> bundleManager = nullptr;
313     formBmsHelper.SetBundleManager(bundleManager);
314     std::string bundleName(data, size);
315     std::string moduleName(data, size);
316     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
317     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
318     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
319     int32_t userId = static_cast<int32_t>(GetU32Data(data));
320     BundleInfo bundleInfo;
321     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
322     formBmsHelper.GetUidByBundleName(bundleName, userId);
323     return true;
324 }
325 
DoSomethingInterestingWithMyAPI17(const char * data,size_t size)326 bool DoSomethingInterestingWithMyAPI17(const char* data, size_t size)
327 {
328     FormBmsHelper formBmsHelper;
329     sptr<IBundleMgr> bundleManager = nullptr;
330     formBmsHelper.SetBundleManager(bundleManager);
331     std::string bundleName(data, size);
332     std::string moduleName(data, size);
333     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
334     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
335     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
336     int32_t userId = static_cast<int32_t>(GetU32Data(data));
337     BundleInfo bundleInfo;
338     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
339     formBmsHelper.GetUidByBundleName(bundleName, userId);
340     return true;
341 }
342 
DoSomethingInterestingWithMyAPI18(const char * data,size_t size)343 bool DoSomethingInterestingWithMyAPI18(const char* data, size_t size)
344 {
345     FormBmsHelper formBmsHelper;
346     sptr<IBundleMgr> bundleManager = nullptr;
347     formBmsHelper.SetBundleManager(bundleManager);
348     std::string bundleName(data, size);
349     std::string moduleName(data, size);
350     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
351     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
352     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
353     int32_t userId = static_cast<int32_t>(GetU32Data(data));
354     BundleInfo bundleInfo;
355     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
356     formBmsHelper.GetUidByBundleName(bundleName, userId);
357     return true;
358 }
359 
DoSomethingInterestingWithMyAPI19(const char * data,size_t size)360 bool DoSomethingInterestingWithMyAPI19(const char* data, size_t size)
361 {
362     FormBmsHelper formBmsHelper;
363     sptr<IBundleMgr> bundleManager = nullptr;
364     formBmsHelper.SetBundleManager(bundleManager);
365     std::string bundleName(data, size);
366     std::string moduleName(data, size);
367     formBmsHelper.NotifyModuleRemovable(bundleName, moduleName);
368     formBmsHelper.NotifyModuleNotRemovable(bundleName, moduleName);
369     formBmsHelper.GenerateModuleKey(bundleName, moduleName);
370     int32_t userId = static_cast<int32_t>(GetU32Data(data));
371     BundleInfo bundleInfo;
372     formBmsHelper.GetBundleInfo(bundleName, userId, bundleInfo);
373     formBmsHelper.GetUidByBundleName(bundleName, userId);
374     return true;
375 }
376 }
377 
378 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)379 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
380 {
381     /* Run your code on data */
382     if (data == nullptr) {
383         return 0;
384     }
385 
386     if (size < OHOS::U32_AT_SIZE) {
387         return 0;
388     }
389 
390     char* ch = reinterpret_cast<char *>(malloc(size + 1));
391     if (ch == nullptr) {
392         return 0;
393     }
394 
395     (void)memset_s(ch, size + 1, 0x00, size + 1);
396     if (memcpy_s(ch, size + 1, data, size) != EOK) {
397         free(ch);
398         ch = nullptr;
399         return 0;
400     }
401 
402     OHOS::DoSomethingInterestingWithMyAPI(ch, size);
403     free(ch);
404     ch = nullptr;
405     return 0;
406 }
407 
408