1 /*
2 * Copyright (c) 2023-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 "softbusclientstub_fuzzer.h"
17
18 #include "securec.h"
19 #include <cstdint>
20
21 #include "client_trans_channel_manager.h"
22 #include "fuzz_data_generator.h"
23 #include "softbus_adapter_mem.h"
24 #include "softbus_client_stub.h"
25
26 namespace OHOS {
27 constexpr size_t FOO_MAX_LEN = 1024;
28 constexpr size_t U32_AT_SIZE = 4;
29
30 class TestEnv {
31 public:
TestEnv()32 TestEnv()
33 {
34 isInited_ = false;
35 ClientTransChannelInit();
36 isInited_ = true;
37 }
38
~TestEnv()39 ~TestEnv()
40 {
41 isInited_ = false;
42 ClientTransChannelDeinit();
43 }
44
IsInited(void)45 bool IsInited(void)
46 {
47 return isInited_;
48 }
49
50 private:
51 volatile bool isInited_;
52 };
53
54 enum SoftBusFuncId {
55 CLIENT_ON_CHANNEL_OPENED = 256,
56 CLIENT_ON_CHANNEL_OPENFAILED,
57 CLIENT_ON_CHANNEL_LINKDOWN,
58 CLIENT_ON_CHANNEL_CLOSED,
59 CLIENT_ON_CHANNEL_MSGRECEIVED,
60 CLIENT_ON_CHANNEL_QOSEVENT,
61
62 CLIENT_DISCOVERY_DEVICE_FOUND,
63
64 CLIENT_ON_JOIN_RESULT,
65 CLIENT_ON_JOIN_METANODE_RESULT,
66 CLIENT_ON_LEAVE_RESULT,
67 CLIENT_ON_LEAVE_METANODE_RESULT,
68 CLIENT_ON_NODE_DEVICE_TRUST_CHANGED,
69 CLIENT_ON_HICHAIN_PROOF_EXCEPTION,
70 CLIENT_ON_NODE_ONLINE_STATE_CHANGED,
71 CLIENT_ON_NODE_BASIC_INFO_CHANGED,
72 CLIENT_ON_LOCAL_NETWORK_ID_CHANGED,
73 CLIENT_ON_TIME_SYNC_RESULT,
74 CLIENT_ON_PUBLISH_LNN_RESULT,
75 CLIENT_ON_REFRESH_LNN_RESULT,
76 CLIENT_ON_REFRESH_DEVICE_FOUND,
77 CLIENT_ON_PERMISSION_CHANGE,
78 CLIENT_SET_CHANNEL_INFO,
79 CLIENT_ON_DATA_LEVEL_CHANGED,
80 CLIENT_ON_TRANS_LIMIT_CHANGE,
81 CLIENT_ON_CHANNEL_BIND,
82 CLIENT_CHECK_COLLAB_RELATION,
83 };
84
85 const std::u16string SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN = u"OHOS.ISoftBusClient";
86
InitOnChannelOpenedInnerMsg(int32_t channelType,const uint8_t * data,size_t size,MessageParcel & message)87 static void InitOnChannelOpenedInnerMsg(int32_t channelType, const uint8_t *data, size_t size, MessageParcel &message)
88 {
89 bool boolParam = (size % 2 == 0) ? true : false;
90 int32_t int32Param = *(reinterpret_cast<const int32_t *>(data));
91 char *charParam = const_cast<char *>(reinterpret_cast<const char *>(data));
92
93 message.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
94
95 message.WriteCString(charParam);
96 message.WriteInt32(int32Param);
97 message.WriteInt32(channelType);
98 message.WriteUint64(size);
99 message.WriteInt32(int32Param);
100
101 message.WriteBool(boolParam);
102 message.WriteBool(boolParam);
103 message.WriteBool(boolParam);
104 message.WriteInt32(int32Param);
105 message.WriteInt32(int32Param);
106 message.WriteCString(charParam);
107 message.WriteUint32(size);
108 message.WriteRawData(data, size);
109 message.WriteCString(charParam);
110 message.WriteCString(charParam);
111 message.WriteInt32(int32Param);
112
113 if (channelType == CHANNEL_TYPE_UDP) {
114 message.WriteCString(charParam);
115 message.WriteInt32(int32Param);
116 message.WriteBool(boolParam);
117 if (boolParam) {
118 message.WriteInt32(int32Param);
119 message.WriteCString(charParam);
120 }
121 }
122
123 message.WriteInt32(int32Param);
124 message.WriteInt32(int32Param);
125 message.WriteInt32(int32Param);
126 message.WriteInt32(int32Param);
127 message.WriteUint32(size);
128 message.WriteInt32(int32Param);
129 message.WriteInt32(int32Param);
130 }
131
TestDataSwitch(const uint8_t * data,size_t size)132 uint8_t *TestDataSwitch(const uint8_t *data, size_t size)
133 {
134 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
135 return nullptr;
136 }
137 uint8_t *dataWithEndCharacter = static_cast<uint8_t *>(SoftBusCalloc(size + 1));
138 if (dataWithEndCharacter == nullptr) {
139 return nullptr;
140 }
141 if (memcpy_s(dataWithEndCharacter, size, data, size) != EOK) {
142 SoftBusFree(dataWithEndCharacter);
143 return nullptr;
144 }
145 return dataWithEndCharacter;
146 }
147
148 /*
149 * Due to FileDescriptor is invalid, CHANNEL_TYPE_TCP_DIRECT will read it and crash
150 * Do not add test case which channel type is CHANNEL_TYPE_TCP_DIRECT
151 */
OnChannelOpenedInnerTest(const uint8_t * data,size_t size)152 bool OnChannelOpenedInnerTest(const uint8_t *data, size_t size)
153 {
154 uint8_t *dataWithEndCharacter = TestDataSwitch(data, size);
155 if (dataWithEndCharacter == nullptr) {
156 return false;
157 }
158 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
159 if (softBusClientStub == nullptr) {
160 return false;
161 }
162
163 MessageParcel reply;
164 MessageOption option;
165 MessageParcel dataNomal;
166 InitOnChannelOpenedInnerMsg(CHANNEL_TYPE_UNDEFINED, dataWithEndCharacter, size, dataNomal);
167
168 MessageParcel dataUdp;
169 InitOnChannelOpenedInnerMsg(CHANNEL_TYPE_UDP, dataWithEndCharacter, size, dataUdp);
170 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_OPENED, dataUdp, reply, option);
171 SoftBusFree(dataWithEndCharacter);
172 return true;
173 }
174
OnChannelOpenFailedInnerTest(const uint8_t * data,size_t size)175 bool OnChannelOpenFailedInnerTest(const uint8_t *data, size_t size)
176 {
177 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
178 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
179 return false;
180 }
181 DataGenerator::Write(data, size);
182
183 int32_t channelId = 0;
184 int32_t channelType = 0;
185 int32_t errCode = 0;
186 GenerateInt32(channelId);
187 GenerateInt32(channelType);
188 GenerateInt32(errCode);
189
190 MessageParcel datas;
191 MessageParcel reply;
192 MessageOption option;
193 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
194 datas.WriteInt32(channelId);
195 datas.WriteInt32(channelType);
196 datas.WriteInt32(errCode);
197 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_OPENFAILED, datas, reply, option);
198 DataGenerator::Clear();
199
200 return true;
201 }
202
OnChannelLinkDownInnerTest(const uint8_t * data,size_t size)203 bool OnChannelLinkDownInnerTest(const uint8_t *data, size_t size)
204 {
205 uint8_t *dataWithEndCharacter = TestDataSwitch(data, size);
206 if (dataWithEndCharacter == nullptr) {
207 return false;
208 }
209 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
210 if (softBusClientStub == nullptr) {
211 return false;
212 }
213
214 char *networkId = const_cast<char *>(reinterpret_cast<const char *>(dataWithEndCharacter));
215 int32_t routeType = *(reinterpret_cast<const int32_t *>(dataWithEndCharacter));
216
217 MessageParcel datas;
218 MessageParcel reply;
219 MessageOption option;
220
221 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
222 datas.WriteCString(networkId);
223 datas.WriteInt32(routeType);
224 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_LINKDOWN, datas, reply, option);
225 SoftBusFree(dataWithEndCharacter);
226
227 return true;
228 }
229
OnChannelClosedInnerTest(const uint8_t * data,size_t size)230 bool OnChannelClosedInnerTest(const uint8_t *data, size_t size)
231 {
232 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
233 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
234 return false;
235 }
236 DataGenerator::Write(data, size);
237
238 int32_t channelId = 0;
239 int32_t channelType = 0;
240 int32_t messageType = 0;
241 GenerateInt32(channelId);
242 GenerateInt32(channelType);
243 GenerateInt32(messageType);
244
245 MessageParcel datas;
246 MessageParcel reply;
247 MessageOption option;
248 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
249 datas.WriteInt32(channelId);
250 datas.WriteInt32(channelType);
251 datas.WriteInt32(messageType);
252 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_CLOSED, datas, reply, option);
253 DataGenerator::Clear();
254
255 return true;
256 }
257
OnChannelMsgReceivedInnerTest(const uint8_t * data,size_t size)258 bool OnChannelMsgReceivedInnerTest(const uint8_t *data, size_t size)
259 {
260 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
261 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
262 return false;
263 }
264 DataGenerator::Write(data, size);
265
266 int32_t channelId = 0;
267 int32_t channelType = 0;
268 int32_t type = 0;
269 GenerateInt32(channelId);
270 GenerateInt32(channelType);
271 GenerateInt32(type);
272
273 MessageParcel datas;
274 MessageParcel reply;
275 MessageOption option;
276 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
277 datas.WriteInt32(channelId);
278 datas.WriteInt32(channelType);
279 datas.WriteUint32(size);
280 datas.WriteRawData(data, size);
281 datas.WriteInt32(type);
282 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_MSGRECEIVED, datas, reply, option);
283 DataGenerator::Clear();
284
285 return true;
286 }
287
OnChannelQosEventInnerTest(const uint8_t * data,size_t size)288 bool OnChannelQosEventInnerTest(const uint8_t *data, size_t size)
289 {
290 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
291 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
292 return false;
293 }
294 DataGenerator::Write(data, size);
295
296 int32_t channelId = 0;
297 int32_t channelType = 0;
298 int32_t eventId = 0;
299 GenerateInt32(channelId);
300 GenerateInt32(channelType);
301 GenerateInt32(eventId);
302 WifiChannelQuality wifiChannelInfo = { 0 };
303 GenerateInt32(wifiChannelInfo.channel);
304 GenerateInt32(wifiChannelInfo.score);
305 QosTv qosTv = {
306 .type = WIFI_CHANNEL_QUALITY,
307 .info.wifiChannelInfo = wifiChannelInfo,
308 };
309
310 MessageParcel datas;
311 MessageParcel reply;
312 MessageOption option;
313 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
314 datas.WriteInt32(channelId);
315 datas.WriteInt32(channelType);
316 datas.WriteInt32(eventId);
317 datas.WriteInt32(sizeof(qosTv));
318 datas.WriteRawData(&qosTv, sizeof(qosTv));
319 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_QOSEVENT, datas, reply, option);
320 DataGenerator::Clear();
321
322 return true;
323 }
324
OnDeviceFoundInnerTest(const uint8_t * data,size_t size)325 bool OnDeviceFoundInnerTest(const uint8_t *data, size_t size)
326 {
327 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
328 return false;
329 }
330 MessageParcel datas;
331 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
332 datas.WriteBuffer(data, size);
333 datas.RewindRead(0);
334 MessageParcel reply;
335 MessageOption option;
336 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
337 if (softBusClientStub == nullptr) {
338 return false;
339 }
340 softBusClientStub->OnRemoteRequest(CLIENT_DISCOVERY_DEVICE_FOUND, datas, reply, option);
341 return true;
342 }
343
OnJoinLNNResultInnerTest(const uint8_t * data,size_t size)344 bool OnJoinLNNResultInnerTest(const uint8_t *data, size_t size)
345 {
346 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
347 return false;
348 }
349 constexpr uint32_t addrTypeLen = 10;
350 constexpr int32_t retCode = 2;
351 const char *test = "test";
352 constexpr size_t len = 4;
353 MessageParcel datas;
354 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
355 datas.WriteUint32(addrTypeLen);
356 datas.WriteInt32(retCode);
357 datas.WriteRawData(test, len);
358 datas.WriteBuffer(data, size);
359 datas.RewindRead(0);
360 MessageParcel reply;
361 MessageOption option;
362 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
363 if (softBusClientStub == nullptr) {
364 return false;
365 }
366 softBusClientStub->OnRemoteRequest(CLIENT_ON_JOIN_RESULT, datas, reply, option);
367 return true;
368 }
369
OnJoinMetaNodeResultInnerTest(const uint8_t * data,size_t size)370 bool OnJoinMetaNodeResultInnerTest(const uint8_t *data, size_t size)
371 {
372 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
373 return false;
374 }
375 constexpr uint32_t addrTypeLen = 12;
376 constexpr int32_t retCode = 2;
377 const char *test = "test";
378 constexpr size_t len = 4;
379 MessageParcel datas;
380 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
381 datas.WriteUint32(addrTypeLen);
382 datas.WriteInt32(retCode);
383 datas.WriteRawData(test, len);
384 datas.WriteBuffer(data, size);
385 datas.RewindRead(0);
386 MessageParcel reply;
387 MessageOption option;
388 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
389 if (softBusClientStub == nullptr) {
390 return false;
391 }
392 softBusClientStub->OnRemoteRequest(CLIENT_ON_JOIN_METANODE_RESULT, datas, reply, option);
393 return true;
394 }
395
OnLeaveLNNResultInnerTest(const uint8_t * data,size_t size)396 bool OnLeaveLNNResultInnerTest(const uint8_t *data, size_t size)
397 {
398 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
399 return false;
400 }
401 constexpr int32_t intNum = 2;
402 MessageParcel datas;
403 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
404 datas.WriteBuffer(data, size);
405 datas.WriteInt32(intNum);
406 datas.RewindRead(0);
407 MessageParcel reply;
408 MessageOption option;
409 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
410 if (softBusClientStub == nullptr) {
411 return false;
412 }
413 softBusClientStub->OnRemoteRequest(CLIENT_ON_LEAVE_RESULT, datas, reply, option);
414 return true;
415 }
416
OnLeaveMetaNodeResultInnerTest(const uint8_t * data,size_t size)417 bool OnLeaveMetaNodeResultInnerTest(const uint8_t *data, size_t size)
418 {
419 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
420 return false;
421 }
422 constexpr int32_t intNum = 2;
423 MessageParcel datas;
424 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
425 datas.WriteBuffer(data, size);
426 datas.WriteInt32(intNum);
427 datas.RewindRead(0);
428 MessageParcel reply;
429 MessageOption option;
430 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
431 if (softBusClientStub == nullptr) {
432 return false;
433 }
434 softBusClientStub->OnRemoteRequest(CLIENT_ON_LEAVE_METANODE_RESULT, datas, reply, option);
435 return true;
436 }
437
OnNodeDeviceTrustedChangeInnerTest(const uint8_t * data,size_t size)438 bool OnNodeDeviceTrustedChangeInnerTest(const uint8_t *data, size_t size)
439 {
440 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
441 return false;
442 }
443 MessageParcel datas;
444 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
445 datas.WriteBuffer(data, size);
446 datas.RewindRead(0);
447 MessageParcel reply;
448 MessageOption option;
449 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
450 if (softBusClientStub == nullptr) {
451 return false;
452 }
453 softBusClientStub->OnRemoteRequest(CLIENT_ON_NODE_DEVICE_TRUST_CHANGED, datas, reply, option);
454 return true;
455 }
456
OnHichainProofExceptionInnerTest(const uint8_t * data,size_t size)457 bool OnHichainProofExceptionInnerTest(const uint8_t *data, size_t size)
458 {
459 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
460 return false;
461 }
462 MessageParcel datas;
463 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
464 datas.WriteBuffer(data, size);
465 datas.RewindRead(0);
466 MessageParcel reply;
467 MessageOption option;
468 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
469 if (softBusClientStub == nullptr) {
470 return false;
471 }
472 softBusClientStub->OnRemoteRequest(CLIENT_ON_HICHAIN_PROOF_EXCEPTION, datas, reply, option);
473 return true;
474 }
475
OnNodeOnlineStateChangedInnerTest(const uint8_t * data,size_t size)476 bool OnNodeOnlineStateChangedInnerTest(const uint8_t *data, size_t size)
477 {
478 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
479 return false;
480 }
481 constexpr uint32_t infoTypeLen = 10;
482 bool boolNum = true;
483 const char *test = "test";
484 constexpr size_t len = 4;
485 MessageParcel datas;
486 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
487 datas.WriteBuffer(data, size);
488 datas.WriteBool(boolNum);
489 datas.WriteUint32(infoTypeLen);
490 datas.WriteRawData(test, len);
491 datas.RewindRead(0);
492 MessageParcel reply;
493 MessageOption option;
494 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
495 if (softBusClientStub == nullptr) {
496 return false;
497 }
498 softBusClientStub->OnRemoteRequest(CLIENT_ON_NODE_ONLINE_STATE_CHANGED, datas, reply, option);
499 return true;
500 }
501
OnNodeBasicInfoChangedInnerTest(const uint8_t * data,size_t size)502 bool OnNodeBasicInfoChangedInnerTest(const uint8_t *data, size_t size)
503 {
504 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
505 return false;
506 }
507 constexpr int32_t type = 2;
508 constexpr uint32_t infoTypeLen = 10;
509 const char *test = "test";
510 constexpr size_t len = 4;
511 MessageParcel datas;
512 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
513 datas.WriteBuffer(data, size);
514 datas.WriteRawData(test, len);
515 datas.WriteInt32(type);
516 datas.WriteUint32(infoTypeLen);
517 datas.RewindRead(0);
518 MessageParcel reply;
519 MessageOption option;
520 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
521 if (softBusClientStub == nullptr) {
522 return false;
523 }
524 softBusClientStub->OnRemoteRequest(CLIENT_ON_NODE_BASIC_INFO_CHANGED, datas, reply, option);
525 return true;
526 }
527
OnTimeSyncResultInnerTest(const uint8_t * data,size_t size)528 bool OnTimeSyncResultInnerTest(const uint8_t *data, size_t size)
529 {
530 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
531 return false;
532 }
533 constexpr uint32_t infoTypeLen = 10;
534 int32_t retCode = *(reinterpret_cast<const char *>(data));
535 const char *test = "test";
536 constexpr size_t len = 4;
537 MessageParcel datas;
538 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
539 datas.WriteInt32(retCode);
540 datas.WriteUint32(infoTypeLen);
541 datas.WriteRawData(test, len);
542 datas.RewindRead(0);
543 MessageParcel reply;
544 MessageOption option;
545 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
546 if (softBusClientStub == nullptr) {
547 return false;
548 }
549 softBusClientStub->OnRemoteRequest(CLIENT_ON_TIME_SYNC_RESULT, datas, reply, option);
550 return true;
551 }
552
OnClientEventByReasonAndCode(const uint8_t * data,size_t size,int32_t reason,uint32_t code)553 static bool OnClientEventByReasonAndCode(const uint8_t *data, size_t size, int32_t reason, uint32_t code)
554 {
555 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
556 return false;
557 }
558 int32_t intNum = *(reinterpret_cast<const int32_t *>(data));
559 MessageParcel datas;
560 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
561 datas.WriteInt32(intNum);
562 datas.WriteInt32(reason);
563 datas.RewindRead(0);
564 MessageParcel reply;
565 MessageOption option;
566 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
567 if (softBusClientStub == nullptr) {
568 return false;
569 }
570 softBusClientStub->OnRemoteRequest(code, datas, reply, option);
571 return true;
572 }
573
OnPublishLNNResultInnerTest(const uint8_t * data,size_t size)574 bool OnPublishLNNResultInnerTest(const uint8_t *data, size_t size)
575 {
576 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
577 return false;
578 }
579 constexpr int32_t reason = 2;
580 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_PUBLISH_LNN_RESULT);
581 }
582
OnRefreshLNNResultInnerTest(const uint8_t * data,size_t size)583 bool OnRefreshLNNResultInnerTest(const uint8_t *data, size_t size)
584 {
585 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
586 return false;
587 }
588 constexpr int32_t reason = 8;
589 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_REFRESH_LNN_RESULT);
590 }
591
OnRefreshDeviceFoundInnerTest(const uint8_t * data,size_t size)592 bool OnRefreshDeviceFoundInnerTest(const uint8_t *data, size_t size)
593 {
594 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
595 return false;
596 }
597 uint32_t deviceLen = *(reinterpret_cast<const int32_t *>(data));
598 const char *test = "test";
599 MessageParcel datas;
600 constexpr size_t len = 4;
601 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
602 datas.WriteUint32(deviceLen);
603 datas.WriteRawData(test, len);
604 datas.RewindRead(0);
605 MessageParcel reply;
606 MessageOption option;
607 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
608 if (softBusClientStub == nullptr) {
609 return false;
610 }
611 softBusClientStub->OnRemoteRequest(CLIENT_ON_REFRESH_DEVICE_FOUND, datas, reply, option);
612 return true;
613 }
614
OnClientPermissonChangeInnerTest(const uint8_t * data,size_t size)615 bool OnClientPermissonChangeInnerTest(const uint8_t *data, size_t size)
616 {
617 uint8_t *dataWithEndCharacter = TestDataSwitch(data, size);
618 if (dataWithEndCharacter == nullptr) {
619 return false;
620 }
621 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
622 if (softBusClientStub == nullptr) {
623 return false;
624 }
625
626 int32_t state = *(reinterpret_cast<const int32_t *>(dataWithEndCharacter));
627 char *pkgName = const_cast<char *>(reinterpret_cast<const char *>(dataWithEndCharacter));
628
629 MessageParcel datas;
630 MessageParcel reply;
631 MessageOption option;
632 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
633 datas.WriteInt32(state);
634 datas.WriteCString(pkgName);
635 softBusClientStub->OnRemoteRequest(CLIENT_ON_PERMISSION_CHANGE, datas, reply, option);
636 SoftBusFree(dataWithEndCharacter);
637
638 return true;
639 }
640
OnDiscoverFailedInnerTest(const uint8_t * data,size_t size)641 bool OnDiscoverFailedInnerTest(const uint8_t *data, size_t size)
642 {
643 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
644 return false;
645 }
646 constexpr int32_t reason = 2;
647 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_PUBLISH_LNN_RESULT);
648 }
649
OnDiscoverySuccessInnerTest(const uint8_t * data,size_t size)650 bool OnDiscoverySuccessInnerTest(const uint8_t *data, size_t size)
651 {
652 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
653 return false;
654 }
655 constexpr int32_t reason = 2;
656 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_PUBLISH_LNN_RESULT);
657 }
658
OnPublishSuccessInnerTest(const uint8_t * data,size_t size)659 bool OnPublishSuccessInnerTest(const uint8_t *data, size_t size)
660 {
661 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
662 return false;
663 }
664 constexpr int32_t reason = 2;
665 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_PUBLISH_LNN_RESULT);
666 }
667
OnPublishFailInnerTest(const uint8_t * data,size_t size)668 bool OnPublishFailInnerTest(const uint8_t *data, size_t size)
669 {
670 if (data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
671 return false;
672 }
673 constexpr int32_t reason = 2;
674 return OnClientEventByReasonAndCode(data, size, reason, CLIENT_ON_PUBLISH_LNN_RESULT);
675 }
676
OnClientTransLimitChangeInnerTest(const uint8_t * data,size_t size)677 bool OnClientTransLimitChangeInnerTest(const uint8_t *data, size_t size)
678 {
679 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
680 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
681 return false;
682 }
683 DataGenerator::Write(data, size);
684
685 int32_t channelId = 0;
686 uint8_t tos = 0;
687 GenerateInt32(channelId);
688 GenerateUint8(tos);
689
690 MessageParcel datas;
691 MessageParcel reply;
692 MessageOption option;
693 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
694 datas.WriteInt32(channelId);
695 datas.WriteUint8(tos);
696 softBusClientStub->OnRemoteRequest(CLIENT_ON_TRANS_LIMIT_CHANGE, datas, reply, option);
697 DataGenerator::Clear();
698
699 return true;
700 }
701
SetChannelInfoInnerTest(const uint8_t * data,size_t size)702 bool SetChannelInfoInnerTest(const uint8_t *data, size_t size)
703 {
704 uint8_t *dataWithEndCharacter = TestDataSwitch(data, size);
705 if (dataWithEndCharacter == nullptr) {
706 return false;
707 }
708 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
709 if (softBusClientStub == nullptr) {
710 return false;
711 }
712 DataGenerator::Write(data, size);
713
714 int32_t sessionId = 0;
715 int32_t channelId = 0;
716 int32_t channelType = 0;
717 GenerateInt32(sessionId);
718 GenerateInt32(channelId);
719 GenerateInt32(channelType);
720 char *sessionName = const_cast<char *>(reinterpret_cast<const char *>(dataWithEndCharacter));
721
722 MessageParcel datas;
723 MessageParcel reply;
724 MessageOption option;
725 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
726 datas.WriteCString(sessionName);
727 datas.WriteInt32(sessionId);
728 datas.WriteInt32(channelId);
729 datas.WriteInt32(channelType);
730 softBusClientStub->OnRemoteRequest(CLIENT_SET_CHANNEL_INFO, datas, reply, option);
731 SoftBusFree(dataWithEndCharacter);
732 DataGenerator::Clear();
733
734 return true;
735 }
736
OnChannelBindInnerTest(const uint8_t * data,size_t size)737 bool OnChannelBindInnerTest(const uint8_t *data, size_t size)
738 {
739 sptr<OHOS::SoftBusClientStub> softBusClientStub = new OHOS::SoftBusClientStub();
740 if (softBusClientStub == nullptr || data == nullptr || size < OHOS::U32_AT_SIZE || size > OHOS::FOO_MAX_LEN) {
741 return false;
742 }
743 DataGenerator::Write(data, size);
744
745 int32_t channelId = 0;
746 int32_t channelType = 0;
747 GenerateInt32(channelId);
748 GenerateInt32(channelType);
749
750 MessageParcel datas;
751 MessageParcel reply;
752 MessageOption option;
753 datas.WriteInterfaceToken(SOFTBUS_CLIENT_STUB_INTERFACE_TOKEN);
754 datas.WriteInt32(channelId);
755 datas.WriteInt32(channelType);
756 softBusClientStub->OnRemoteRequest(CLIENT_ON_CHANNEL_BIND, datas, reply, option);
757 DataGenerator::Clear();
758
759 return true;
760 }
761 } // namespace OHOS
762
763 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)764 extern "C" int32_t LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
765 {
766 static OHOS::TestEnv env;
767 if (!env.IsInited()) {
768 return 0;
769 }
770 OHOS::OnChannelOpenedInnerTest(data, size);
771 OHOS::OnChannelOpenFailedInnerTest(data, size);
772 OHOS::OnChannelLinkDownInnerTest(data, size);
773 OHOS::OnChannelClosedInnerTest(data, size);
774 OHOS::OnChannelMsgReceivedInnerTest(data, size);
775 OHOS::OnChannelQosEventInnerTest(data, size);
776 OHOS::OnDeviceFoundInnerTest(data, size);
777 OHOS::OnJoinLNNResultInnerTest(data, size);
778 OHOS::OnJoinMetaNodeResultInnerTest(data, size);
779 OHOS::OnLeaveLNNResultInnerTest(data, size);
780 OHOS::OnLeaveMetaNodeResultInnerTest(data, size);
781 OHOS::OnHichainProofExceptionInnerTest(data, size);
782 OHOS::OnNodeOnlineStateChangedInnerTest(data, size);
783 OHOS::OnNodeBasicInfoChangedInnerTest(data, size);
784 OHOS::OnTimeSyncResultInnerTest(data, size);
785 OHOS::OnPublishLNNResultInnerTest(data, size);
786 OHOS::OnRefreshLNNResultInnerTest(data, size);
787 OHOS::OnRefreshDeviceFoundInnerTest(data, size);
788 OHOS::OnClientPermissonChangeInnerTest(data, size);
789 OHOS::OnDiscoverFailedInnerTest(data, size);
790 OHOS::OnDiscoverySuccessInnerTest(data, size);
791 OHOS::OnPublishSuccessInnerTest(data, size);
792 OHOS::OnPublishFailInnerTest(data, size);
793 OHOS::OnClientTransLimitChangeInnerTest(data, size);
794 OHOS::SetChannelInfoInnerTest(data, size);
795 OHOS::OnChannelBindInnerTest(data, size);
796 return 0;
797 }
798