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