• 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 "forminfomgr_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 
21 #define private public
22 #define protected public
23 #include "data_center/form_info/form_info_mgr.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     FormInfoMgr formInfoMgr;
40     formInfoMgr.Start();
41     std::string bundleName(data, size);
42     int32_t userId = static_cast<int32_t>(GetU32Data(data));
43     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
44     formInfoMgr.Remove(bundleName, userId);
45     FormInfo formInfo;
46     std::vector<FormInfo> formInfos;
47     formInfos.emplace_back(formInfo);
48     formInfoMgr.GetAllFormsInfo(formInfos);
49     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
50     std::string moduleName(data, size);
51     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
52     BundleInfo bundleInfo;
53     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
54     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
55     std::string formName(data, size);
56     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
57     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
58     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
59     formInfoMgr.IsCaller(bundleName);
60     formInfoMgr.CheckBundlePermission();
61     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
62     FormInfoHelper formInfoHelper;
63     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
64     formInfoHelper.GetResourceManager(bundleInfo);
65     std::string formInfoStoragesJson(data, size);
66     BundleFormInfo bundleFormInfo(bundleName);
67     bundleFormInfo.InitFromJson(formInfoStoragesJson);
68     bundleFormInfo.Remove(userId);
69     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
70     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
71     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
72     bundleFormInfo.Empty();
73     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
74     FormInfoFilter filter;
75     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
76     bundleFormInfo.UpdateFormInfoStorageLocked();
77     return formInfoMgr.ReloadFormInfos(userId);
78 }
79 
DoSomethingInterestingWithMyAPI1(const char * data,size_t size)80 bool DoSomethingInterestingWithMyAPI1(const char* data, size_t size)
81 {
82     FormInfoMgr formInfoMgr;
83     formInfoMgr.Start();
84     std::string bundleName(data, size);
85     int32_t userId = static_cast<int32_t>(GetU32Data(data));
86     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
87     formInfoMgr.Remove(bundleName, userId);
88     FormInfo formInfo;
89     std::vector<FormInfo> formInfos;
90     formInfos.emplace_back(formInfo);
91     formInfoMgr.GetAllFormsInfo(formInfos);
92     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
93     std::string moduleName(data, size);
94     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
95     BundleInfo bundleInfo;
96     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
97     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
98     std::string formName(data, size);
99     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
100     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
101     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
102     formInfoMgr.IsCaller(bundleName);
103     formInfoMgr.CheckBundlePermission();
104     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
105     FormInfoHelper formInfoHelper;
106     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
107     formInfoHelper.GetResourceManager(bundleInfo);
108     std::string formInfoStoragesJson(data, size);
109     BundleFormInfo bundleFormInfo(bundleName);
110     bundleFormInfo.InitFromJson(formInfoStoragesJson);
111     bundleFormInfo.Remove(userId);
112     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
113     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
114     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
115     bundleFormInfo.Empty();
116     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
117     FormInfoFilter filter;
118     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
119     bundleFormInfo.UpdateFormInfoStorageLocked();
120     return formInfoMgr.ReloadFormInfos(userId);
121 }
122 
DoSomethingInterestingWithMyAPI2(const char * data,size_t size)123 bool DoSomethingInterestingWithMyAPI2(const char* data, size_t size)
124 {
125     FormInfoMgr formInfoMgr;
126     formInfoMgr.Start();
127     std::string bundleName(data, size);
128     int32_t userId = static_cast<int32_t>(GetU32Data(data));
129     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
130     formInfoMgr.Remove(bundleName, userId);
131     FormInfo formInfo;
132     std::vector<FormInfo> formInfos;
133     formInfos.emplace_back(formInfo);
134     formInfoMgr.GetAllFormsInfo(formInfos);
135     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
136     std::string moduleName(data, size);
137     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
138     BundleInfo bundleInfo;
139     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
140     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
141     std::string formName(data, size);
142     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
143     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
144     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
145     formInfoMgr.IsCaller(bundleName);
146     formInfoMgr.CheckBundlePermission();
147     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
148     FormInfoHelper formInfoHelper;
149     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
150     formInfoHelper.GetResourceManager(bundleInfo);
151     std::string formInfoStoragesJson(data, size);
152     BundleFormInfo bundleFormInfo(bundleName);
153     bundleFormInfo.InitFromJson(formInfoStoragesJson);
154     bundleFormInfo.Remove(userId);
155     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
156     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
157     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
158     bundleFormInfo.Empty();
159     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
160     FormInfoFilter filter;
161     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
162     bundleFormInfo.UpdateFormInfoStorageLocked();
163     return formInfoMgr.ReloadFormInfos(userId);
164 }
165 
DoSomethingInterestingWithMyAPI3(const char * data,size_t size)166 bool DoSomethingInterestingWithMyAPI3(const char* data, size_t size)
167 {
168     FormInfoMgr formInfoMgr;
169     formInfoMgr.Start();
170     std::string bundleName(data, size);
171     int32_t userId = static_cast<int32_t>(GetU32Data(data));
172     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
173     formInfoMgr.Remove(bundleName, userId);
174     FormInfo formInfo;
175     std::vector<FormInfo> formInfos;
176     formInfos.emplace_back(formInfo);
177     formInfoMgr.GetAllFormsInfo(formInfos);
178     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
179     std::string moduleName(data, size);
180     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
181     BundleInfo bundleInfo;
182     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
183     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
184     std::string formName(data, size);
185     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
186     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
187     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
188     formInfoMgr.IsCaller(bundleName);
189     formInfoMgr.CheckBundlePermission();
190     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
191     FormInfoHelper formInfoHelper;
192     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
193     formInfoHelper.GetResourceManager(bundleInfo);
194     std::string formInfoStoragesJson(data, size);
195     BundleFormInfo bundleFormInfo(bundleName);
196     bundleFormInfo.InitFromJson(formInfoStoragesJson);
197     bundleFormInfo.Remove(userId);
198     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
199     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
200     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
201     bundleFormInfo.Empty();
202     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
203     FormInfoFilter filter;
204     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
205     bundleFormInfo.UpdateFormInfoStorageLocked();
206     return formInfoMgr.ReloadFormInfos(userId);
207 }
208 
DoSomethingInterestingWithMyAPI4(const char * data,size_t size)209 bool DoSomethingInterestingWithMyAPI4(const char* data, size_t size)
210 {
211     FormInfoMgr formInfoMgr;
212     formInfoMgr.Start();
213     std::string bundleName(data, size);
214     int32_t userId = static_cast<int32_t>(GetU32Data(data));
215     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
216     formInfoMgr.Remove(bundleName, userId);
217     FormInfo formInfo;
218     std::vector<FormInfo> formInfos;
219     formInfos.emplace_back(formInfo);
220     formInfoMgr.GetAllFormsInfo(formInfos);
221     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
222     std::string moduleName(data, size);
223     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
224     BundleInfo bundleInfo;
225     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
226     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
227     std::string formName(data, size);
228     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
229     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
230     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
231     formInfoMgr.IsCaller(bundleName);
232     formInfoMgr.CheckBundlePermission();
233     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
234     FormInfoHelper formInfoHelper;
235     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
236     formInfoHelper.GetResourceManager(bundleInfo);
237     std::string formInfoStoragesJson(data, size);
238     BundleFormInfo bundleFormInfo(bundleName);
239     bundleFormInfo.InitFromJson(formInfoStoragesJson);
240     bundleFormInfo.Remove(userId);
241     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
242     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
243     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
244     bundleFormInfo.Empty();
245     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
246     FormInfoFilter filter;
247     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
248     bundleFormInfo.UpdateFormInfoStorageLocked();
249     return formInfoMgr.ReloadFormInfos(userId);
250 }
251 
DoSomethingInterestingWithMyAPI5(const char * data,size_t size)252 bool DoSomethingInterestingWithMyAPI5(const char* data, size_t size)
253 {
254     FormInfoMgr formInfoMgr;
255     formInfoMgr.Start();
256     std::string bundleName(data, size);
257     int32_t userId = static_cast<int32_t>(GetU32Data(data));
258     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
259     formInfoMgr.Remove(bundleName, userId);
260     FormInfo formInfo;
261     std::vector<FormInfo> formInfos;
262     formInfos.emplace_back(formInfo);
263     formInfoMgr.GetAllFormsInfo(formInfos);
264     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
265     std::string moduleName(data, size);
266     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
267     BundleInfo bundleInfo;
268     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
269     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
270     std::string formName(data, size);
271     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
272     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
273     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
274     formInfoMgr.IsCaller(bundleName);
275     formInfoMgr.CheckBundlePermission();
276     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
277     FormInfoHelper formInfoHelper;
278     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
279     formInfoHelper.GetResourceManager(bundleInfo);
280     std::string formInfoStoragesJson(data, size);
281     BundleFormInfo bundleFormInfo(bundleName);
282     bundleFormInfo.InitFromJson(formInfoStoragesJson);
283     bundleFormInfo.Remove(userId);
284     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
285     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
286     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
287     bundleFormInfo.Empty();
288     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
289     FormInfoFilter filter;
290     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
291     bundleFormInfo.UpdateFormInfoStorageLocked();
292     return formInfoMgr.ReloadFormInfos(userId);
293 }
294 
DoSomethingInterestingWithMyAPI6(const char * data,size_t size)295 bool DoSomethingInterestingWithMyAPI6(const char* data, size_t size)
296 {
297     FormInfoMgr formInfoMgr;
298     formInfoMgr.Start();
299     std::string bundleName(data, size);
300     int32_t userId = static_cast<int32_t>(GetU32Data(data));
301     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
302     formInfoMgr.Remove(bundleName, userId);
303     FormInfo formInfo;
304     std::vector<FormInfo> formInfos;
305     formInfos.emplace_back(formInfo);
306     formInfoMgr.GetAllFormsInfo(formInfos);
307     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
308     std::string moduleName(data, size);
309     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
310     BundleInfo bundleInfo;
311     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
312     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
313     std::string formName(data, size);
314     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
315     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
316     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
317     formInfoMgr.IsCaller(bundleName);
318     formInfoMgr.CheckBundlePermission();
319     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
320     FormInfoHelper formInfoHelper;
321     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
322     formInfoHelper.GetResourceManager(bundleInfo);
323     std::string formInfoStoragesJson(data, size);
324     BundleFormInfo bundleFormInfo(bundleName);
325     bundleFormInfo.InitFromJson(formInfoStoragesJson);
326     bundleFormInfo.Remove(userId);
327     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
328     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
329     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
330     bundleFormInfo.Empty();
331     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
332     FormInfoFilter filter;
333     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
334     bundleFormInfo.UpdateFormInfoStorageLocked();
335     return formInfoMgr.ReloadFormInfos(userId);
336 }
337 
DoSomethingInterestingWithMyAPI7(const char * data,size_t size)338 bool DoSomethingInterestingWithMyAPI7(const char* data, size_t size)
339 {
340     FormInfoMgr formInfoMgr;
341     formInfoMgr.Start();
342     std::string bundleName(data, size);
343     int32_t userId = static_cast<int32_t>(GetU32Data(data));
344     formInfoMgr.UpdateStaticFormInfos(bundleName, userId);
345     formInfoMgr.Remove(bundleName, userId);
346     FormInfo formInfo;
347     std::vector<FormInfo> formInfos;
348     formInfos.emplace_back(formInfo);
349     formInfoMgr.GetAllFormsInfo(formInfos);
350     formInfoMgr.GetFormsInfoByBundle(bundleName, formInfos);
351     std::string moduleName(data, size);
352     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
353     BundleInfo bundleInfo;
354     formInfoMgr.CheckDynamicFormInfo(formInfo, bundleInfo);
355     formInfoMgr.AddDynamicFormInfo(formInfo, userId);
356     std::string formName(data, size);
357     formInfoMgr.RemoveDynamicFormInfo(bundleName, moduleName, formName, userId);
358     formInfoMgr.RemoveAllDynamicFormsInfo(bundleName, userId);
359     formInfoMgr.GetOrCreateBundleFromInfo(bundleName);
360     formInfoMgr.IsCaller(bundleName);
361     formInfoMgr.CheckBundlePermission();
362     formInfoMgr.GetFormsInfoByModule(bundleName, moduleName, formInfos);
363     FormInfoHelper formInfoHelper;
364     formInfoHelper.LoadAbilityFormConfigInfo(bundleInfo, formInfos);
365     formInfoHelper.GetResourceManager(bundleInfo);
366     std::string formInfoStoragesJson(data, size);
367     BundleFormInfo bundleFormInfo(bundleName);
368     bundleFormInfo.InitFromJson(formInfoStoragesJson);
369     bundleFormInfo.Remove(userId);
370     bundleFormInfo.AddDynamicFormInfo(formInfo, userId);
371     bundleFormInfo.RemoveDynamicFormInfo(moduleName, formName, userId);
372     bundleFormInfo.RemoveAllDynamicFormsInfo(userId);
373     bundleFormInfo.Empty();
374     bundleFormInfo.GetAllFormsInfo(formInfos, userId);
375     FormInfoFilter filter;
376     bundleFormInfo.GetFormsInfoByFilter(filter, formInfos, userId);
377     bundleFormInfo.UpdateFormInfoStorageLocked();
378     return formInfoMgr.ReloadFormInfos(userId);
379 }
380 }
381 
382 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)383 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
384 {
385     /* Run your code on data */
386     if (data == nullptr) {
387         return 0;
388     }
389 
390     if (size < OHOS::U32_AT_SIZE) {
391         return 0;
392     }
393 
394     char* ch = static_cast<char*>(malloc(size + 1));
395     if (ch == nullptr) {
396         return 0;
397     }
398 
399     (void)memset_s(ch, size + 1, 0x00, size + 1);
400     if (memcpy_s(ch, size + 1, data, size) != EOK) {
401         free(ch);
402         ch = nullptr;
403         return 0;
404     }
405 
406     OHOS::DoSomethingInterestingWithMyAPI(ch, size);
407     free(ch);
408     ch = nullptr;
409     return 0;
410 }
411 
412