• 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 "formdatamgrthree_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 
21 #define private public
22 #define protected public
23 #include "data_center/form_data_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;
32 constexpr uint8_t ENABLE = 2;
GetU32Data(const char * ptr)33 uint32_t GetU32Data(const char* ptr)
34 {
35     // convert fuzz input data to an integer
36     return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];
37 }
DoSomethingInterestingWithMyAPI(const char * data,size_t size)38 bool DoSomethingInterestingWithMyAPI(const char* data, size_t size)
39 {
40     FormDataMgr formDataMgr;
41     int64_t formId = static_cast<int64_t>(GetU32Data(data));
42     bool versionUpgrade = *data % ENABLE;
43     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
44     FormRecord formRecord;
45     formDataMgr.UpdateHostForm(formId, formRecord);
46     std::vector<int64_t> formIds;
47     formIds.emplace_back(formId);
48     bool flag = *data % ENABLE;
49     bool isOnlyEnableUpdate = *data % ENABLE;
50     FormHostRecord formHostRecord;
51     std::vector<int64_t> refreshForms;
52     refreshForms.emplace_back(formId);
53     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
54     sptr<IRemoteObject> callerToken = nullptr;
55     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
56     formDataMgr.FindMatchedFormId(formId);
57     int uId = static_cast<int>(GetU32Data(data));
58     formDataMgr.ClearHostDataByUId(uId);
59     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
60     std::string bundleName(data, size);
61     std::string abilityName(data, size);
62     FormIdKey formIdKey(bundleName, abilityName);
63     std::set<int64_t> aa;
64     aa.insert(formId);
65     noHostTempFormsMap.emplace(formIdKey, aa);
66     std::map<int64_t, bool> foundFormsMap;
67     foundFormsMap.emplace(formId, flag);
68     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
69     FormItemInfo info;
70     formDataMgr.ParseUpdateConfig(formRecord, info);
71     int configDuration = static_cast<int>(GetU32Data(data));
72     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
73     formDataMgr.ParseAtTimerConfig(formRecord, info);
74     formDataMgr.IsFormCached(formRecord);
75     std::string provider(data, size);
76     int callingUid = static_cast<int>(GetU32Data(data));
77     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
78     bool isVisible = *data % ENABLE;
79     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
80     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
81     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
82     return true;
83 }
84 
DoSomethingInterestingWithMyAPI1(const char * data,size_t size)85 bool DoSomethingInterestingWithMyAPI1(const char* data, size_t size)
86 {
87     FormDataMgr formDataMgr;
88     int64_t formId = static_cast<int64_t>(GetU32Data(data));
89     bool versionUpgrade = *data % ENABLE;
90     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
91     FormRecord formRecord;
92     formDataMgr.UpdateHostForm(formId, formRecord);
93     std::vector<int64_t> formIds;
94     formIds.emplace_back(formId);
95     bool flag = *data % ENABLE;
96     bool isOnlyEnableUpdate = *data % ENABLE;
97     FormHostRecord formHostRecord;
98     std::vector<int64_t> refreshForms;
99     refreshForms.emplace_back(formId);
100     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
101     sptr<IRemoteObject> callerToken = nullptr;
102     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
103     formDataMgr.FindMatchedFormId(formId);
104     int uId = static_cast<int>(GetU32Data(data));
105     formDataMgr.ClearHostDataByUId(uId);
106     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
107     std::string bundleName(data, size);
108     std::string abilityName(data, size);
109     FormIdKey formIdKey(bundleName, abilityName);
110     std::set<int64_t> aa;
111     aa.insert(formId);
112     noHostTempFormsMap.emplace(formIdKey, aa);
113     std::map<int64_t, bool> foundFormsMap;
114     foundFormsMap.emplace(formId, flag);
115     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
116     FormItemInfo info;
117     formDataMgr.ParseUpdateConfig(formRecord, info);
118     int configDuration = static_cast<int>(GetU32Data(data));
119     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
120     formDataMgr.ParseAtTimerConfig(formRecord, info);
121     formDataMgr.IsFormCached(formRecord);
122     std::string provider(data, size);
123     int callingUid = static_cast<int>(GetU32Data(data));
124     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
125     bool isVisible = *data % ENABLE;
126     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
127     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
128     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
129     return true;
130 }
131 
DoSomethingInterestingWithMyAPI2(const char * data,size_t size)132 bool DoSomethingInterestingWithMyAPI2(const char* data, size_t size)
133 {
134     FormDataMgr formDataMgr;
135     int64_t formId = static_cast<int64_t>(GetU32Data(data));
136     bool versionUpgrade = *data % ENABLE;
137     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
138     FormRecord formRecord;
139     formDataMgr.UpdateHostForm(formId, formRecord);
140     std::vector<int64_t> formIds;
141     formIds.emplace_back(formId);
142     bool flag = *data % ENABLE;
143     bool isOnlyEnableUpdate = *data % ENABLE;
144     FormHostRecord formHostRecord;
145     std::vector<int64_t> refreshForms;
146     refreshForms.emplace_back(formId);
147     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
148     sptr<IRemoteObject> callerToken = nullptr;
149     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
150     formDataMgr.FindMatchedFormId(formId);
151     int uId = static_cast<int>(GetU32Data(data));
152     formDataMgr.ClearHostDataByUId(uId);
153     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
154     std::string bundleName(data, size);
155     std::string abilityName(data, size);
156     FormIdKey formIdKey(bundleName, abilityName);
157     std::set<int64_t> aa;
158     aa.insert(formId);
159     noHostTempFormsMap.emplace(formIdKey, aa);
160     std::map<int64_t, bool> foundFormsMap;
161     foundFormsMap.emplace(formId, flag);
162     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
163     FormItemInfo info;
164     formDataMgr.ParseUpdateConfig(formRecord, info);
165     int configDuration = static_cast<int>(GetU32Data(data));
166     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
167     formDataMgr.ParseAtTimerConfig(formRecord, info);
168     formDataMgr.IsFormCached(formRecord);
169     std::string provider(data, size);
170     int callingUid = static_cast<int>(GetU32Data(data));
171     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
172     bool isVisible = *data % ENABLE;
173     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
174     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
175     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
176     return true;
177 }
178 
DoSomethingInterestingWithMyAPI3(const char * data,size_t size)179 bool DoSomethingInterestingWithMyAPI3(const char* data, size_t size)
180 {
181     FormDataMgr formDataMgr;
182     int64_t formId = static_cast<int64_t>(GetU32Data(data));
183     bool versionUpgrade = *data % ENABLE;
184     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
185     FormRecord formRecord;
186     formDataMgr.UpdateHostForm(formId, formRecord);
187     std::vector<int64_t> formIds;
188     formIds.emplace_back(formId);
189     bool flag = *data % ENABLE;
190     bool isOnlyEnableUpdate = *data % ENABLE;
191     FormHostRecord formHostRecord;
192     std::vector<int64_t> refreshForms;
193     refreshForms.emplace_back(formId);
194     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
195     sptr<IRemoteObject> callerToken = nullptr;
196     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
197     formDataMgr.FindMatchedFormId(formId);
198     int uId = static_cast<int>(GetU32Data(data));
199     formDataMgr.ClearHostDataByUId(uId);
200     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
201     std::string bundleName(data, size);
202     std::string abilityName(data, size);
203     FormIdKey formIdKey(bundleName, abilityName);
204     std::set<int64_t> aa;
205     aa.insert(formId);
206     noHostTempFormsMap.emplace(formIdKey, aa);
207     std::map<int64_t, bool> foundFormsMap;
208     foundFormsMap.emplace(formId, flag);
209     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
210     FormItemInfo info;
211     formDataMgr.ParseUpdateConfig(formRecord, info);
212     int configDuration = static_cast<int>(GetU32Data(data));
213     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
214     formDataMgr.ParseAtTimerConfig(formRecord, info);
215     formDataMgr.IsFormCached(formRecord);
216     std::string provider(data, size);
217     int callingUid = static_cast<int>(GetU32Data(data));
218     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
219     bool isVisible = *data % ENABLE;
220     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
221     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
222     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
223     return true;
224 }
225 
DoSomethingInterestingWithMyAPI4(const char * data,size_t size)226 bool DoSomethingInterestingWithMyAPI4(const char* data, size_t size)
227 {
228     FormDataMgr formDataMgr;
229     int64_t formId = static_cast<int64_t>(GetU32Data(data));
230     bool versionUpgrade = *data % ENABLE;
231     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
232     FormRecord formRecord;
233     formDataMgr.UpdateHostForm(formId, formRecord);
234     std::vector<int64_t> formIds;
235     formIds.emplace_back(formId);
236     bool flag = *data % ENABLE;
237     bool isOnlyEnableUpdate = *data % ENABLE;
238     FormHostRecord formHostRecord;
239     std::vector<int64_t> refreshForms;
240     refreshForms.emplace_back(formId);
241     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
242     sptr<IRemoteObject> callerToken = nullptr;
243     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
244     formDataMgr.FindMatchedFormId(formId);
245     int uId = static_cast<int>(GetU32Data(data));
246     formDataMgr.ClearHostDataByUId(uId);
247     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
248     std::string bundleName(data, size);
249     std::string abilityName(data, size);
250     FormIdKey formIdKey(bundleName, abilityName);
251     std::set<int64_t> aa;
252     aa.insert(formId);
253     noHostTempFormsMap.emplace(formIdKey, aa);
254     std::map<int64_t, bool> foundFormsMap;
255     foundFormsMap.emplace(formId, flag);
256     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
257     FormItemInfo info;
258     formDataMgr.ParseUpdateConfig(formRecord, info);
259     int configDuration = static_cast<int>(GetU32Data(data));
260     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
261     formDataMgr.ParseAtTimerConfig(formRecord, info);
262     formDataMgr.IsFormCached(formRecord);
263     std::string provider(data, size);
264     int callingUid = static_cast<int>(GetU32Data(data));
265     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
266     bool isVisible = *data % ENABLE;
267     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
268     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
269     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
270     return true;
271 }
272 
DoSomethingInterestingWithMyAPI5(const char * data,size_t size)273 bool DoSomethingInterestingWithMyAPI5(const char* data, size_t size)
274 {
275     FormDataMgr formDataMgr;
276     int64_t formId = static_cast<int64_t>(GetU32Data(data));
277     bool versionUpgrade = *data % ENABLE;
278     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
279     FormRecord formRecord;
280     formDataMgr.UpdateHostForm(formId, formRecord);
281     std::vector<int64_t> formIds;
282     formIds.emplace_back(formId);
283     bool flag = *data % ENABLE;
284     bool isOnlyEnableUpdate = *data % ENABLE;
285     FormHostRecord formHostRecord;
286     std::vector<int64_t> refreshForms;
287     refreshForms.emplace_back(formId);
288     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
289     sptr<IRemoteObject> callerToken = nullptr;
290     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
291     formDataMgr.FindMatchedFormId(formId);
292     int uId = static_cast<int>(GetU32Data(data));
293     formDataMgr.ClearHostDataByUId(uId);
294     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
295     std::string bundleName(data, size);
296     std::string abilityName(data, size);
297     FormIdKey formIdKey(bundleName, abilityName);
298     std::set<int64_t> aa;
299     aa.insert(formId);
300     noHostTempFormsMap.emplace(formIdKey, aa);
301     std::map<int64_t, bool> foundFormsMap;
302     foundFormsMap.emplace(formId, flag);
303     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
304     FormItemInfo info;
305     formDataMgr.ParseUpdateConfig(formRecord, info);
306     int configDuration = static_cast<int>(GetU32Data(data));
307     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
308     formDataMgr.ParseAtTimerConfig(formRecord, info);
309     formDataMgr.IsFormCached(formRecord);
310     std::string provider(data, size);
311     int callingUid = static_cast<int>(GetU32Data(data));
312     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
313     bool isVisible = *data % ENABLE;
314     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
315     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
316     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
317     return true;
318 }
319 
DoSomethingInterestingWithMyAPI6(const char * data,size_t size)320 bool DoSomethingInterestingWithMyAPI6(const char* data, size_t size)
321 {
322     FormDataMgr formDataMgr;
323     int64_t formId = static_cast<int64_t>(GetU32Data(data));
324     bool versionUpgrade = *data % ENABLE;
325     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
326     FormRecord formRecord;
327     formDataMgr.UpdateHostForm(formId, formRecord);
328     std::vector<int64_t> formIds;
329     formIds.emplace_back(formId);
330     bool flag = *data % ENABLE;
331     bool isOnlyEnableUpdate = *data % ENABLE;
332     FormHostRecord formHostRecord;
333     std::vector<int64_t> refreshForms;
334     refreshForms.emplace_back(formId);
335     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
336     sptr<IRemoteObject> callerToken = nullptr;
337     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
338     formDataMgr.FindMatchedFormId(formId);
339     int uId = static_cast<int>(GetU32Data(data));
340     formDataMgr.ClearHostDataByUId(uId);
341     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
342     std::string bundleName(data, size);
343     std::string abilityName(data, size);
344     FormIdKey formIdKey(bundleName, abilityName);
345     std::set<int64_t> aa;
346     aa.insert(formId);
347     noHostTempFormsMap.emplace(formIdKey, aa);
348     std::map<int64_t, bool> foundFormsMap;
349     foundFormsMap.emplace(formId, flag);
350     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
351     FormItemInfo info;
352     formDataMgr.ParseUpdateConfig(formRecord, info);
353     int configDuration = static_cast<int>(GetU32Data(data));
354     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
355     formDataMgr.ParseAtTimerConfig(formRecord, info);
356     formDataMgr.IsFormCached(formRecord);
357     std::string provider(data, size);
358     int callingUid = static_cast<int>(GetU32Data(data));
359     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
360     bool isVisible = *data % ENABLE;
361     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
362     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
363     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
364     return true;
365 }
366 
DoSomethingInterestingWithMyAPI7(const char * data,size_t size)367 bool DoSomethingInterestingWithMyAPI7(const char* data, size_t size)
368 {
369     FormDataMgr formDataMgr;
370     int64_t formId = static_cast<int64_t>(GetU32Data(data));
371     bool versionUpgrade = *data % ENABLE;
372     formDataMgr.SetVersionUpgrade(formId, versionUpgrade);
373     FormRecord formRecord;
374     formDataMgr.UpdateHostForm(formId, formRecord);
375     std::vector<int64_t> formIds;
376     formIds.emplace_back(formId);
377     bool flag = *data % ENABLE;
378     bool isOnlyEnableUpdate = *data % ENABLE;
379     FormHostRecord formHostRecord;
380     std::vector<int64_t> refreshForms;
381     refreshForms.emplace_back(formId);
382     formDataMgr.HandleUpdateHostFormFlag(formIds, flag, isOnlyEnableUpdate, formHostRecord, refreshForms);
383     sptr<IRemoteObject> callerToken = nullptr;
384     formDataMgr.UpdateHostFormFlag(formIds, callerToken, flag, isOnlyEnableUpdate, refreshForms);
385     formDataMgr.FindMatchedFormId(formId);
386     int uId = static_cast<int>(GetU32Data(data));
387     formDataMgr.ClearHostDataByUId(uId);
388     std::map<FormIdKey, std::set<int64_t>> noHostTempFormsMap;
389     std::string bundleName(data, size);
390     std::string abilityName(data, size);
391     FormIdKey formIdKey(bundleName, abilityName);
392     std::set<int64_t> aa;
393     aa.insert(formId);
394     noHostTempFormsMap.emplace(formIdKey, aa);
395     std::map<int64_t, bool> foundFormsMap;
396     foundFormsMap.emplace(formId, flag);
397     formDataMgr.GetNoHostTempForms(uId, noHostTempFormsMap, foundFormsMap);
398     FormItemInfo info;
399     formDataMgr.ParseUpdateConfig(formRecord, info);
400     int configDuration = static_cast<int>(GetU32Data(data));
401     formDataMgr.ParseIntervalConfig(formRecord, configDuration);
402     formDataMgr.ParseAtTimerConfig(formRecord, info);
403     formDataMgr.IsFormCached(formRecord);
404     std::string provider(data, size);
405     int callingUid = static_cast<int>(GetU32Data(data));
406     formDataMgr.CreateFormStateRecord(provider, info, callerToken, callingUid);
407     bool isVisible = *data % ENABLE;
408     formDataMgr.NotifyFormsVisible(formIds, isVisible, callerToken);
409     int64_t matchedFormId = static_cast<int64_t>(GetU32Data(data));
410     formDataMgr.SetRecordVisible(matchedFormId, isVisible);
411     return true;
412 }
413 }
414 
415 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)416 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
417 {
418     /* Run your code on data */
419     if (data == nullptr) {
420         return 0;
421     }
422 
423     if (size < OHOS::U32_AT_SIZE) {
424         return 0;
425     }
426 
427     char* ch = reinterpret_cast<char *>(malloc(size + 1));
428     if (ch == nullptr) {
429         return 0;
430     }
431 
432     (void)memset_s(ch, size + 1, 0x00, size + 1);
433     if (memcpy_s(ch, size + 1, data, size) != EOK) {
434         free(ch);
435         ch = nullptr;
436         return 0;
437     }
438 
439     OHOS::DoSomethingInterestingWithMyAPI(ch, size);
440     free(ch);
441     ch = nullptr;
442     return 0;
443 }
444 
445