• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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