• 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 "clienttransudpmanager_fuzzer.h"
17 #include <cstddef>
18 #include <cstdint>
19 #include <securec.h>
20 #include "inner_session.h"
21 #include "session.h"
22 #include "softbus_utils.h"
23 #include "client_trans_udp_manager.h"
24 
25 #define STR_LEN 100000
26 #define TEST_TMP_STR_LEN 50
27 #define TEST_TMP_STR "testtmpStr"
28 namespace OHOS {
TransOnUdpChannelOpenedTest(const uint8_t * data,size_t size)29     void TransOnUdpChannelOpenedTest(const uint8_t* data, size_t size)
30     {
31         if ((data == nullptr) || (size == 0)) {
32             return;
33         }
34         ChannelInfo channel = {0};
35         channel.channelType = CHANNEL_TYPE_UDP;
36         channel.businessType = BUSINESS_TYPE_STREAM;
37         int32_t udpPort = size;
38         TransOnUdpChannelOpened((char *)data, &channel, &udpPort);
39     }
40 
TransOnUdpChannelOpenFailedTest(const uint8_t * data,size_t size)41     void TransOnUdpChannelOpenFailedTest(const uint8_t* data, size_t size)
42     {
43         if ((data == nullptr) || (size == 0)) {
44             return;
45         }
46         TransOnUdpChannelOpenFailed((int32_t)size, (int32_t)size);
47     }
48 
TransOnUdpChannelClosedTest(const uint8_t * data,size_t size)49     void TransOnUdpChannelClosedTest(const uint8_t* data, size_t size)
50     {
51         if ((data == nullptr) || (size == 0)) {
52             return;
53         }
54         TransOnUdpChannelClosed((int32_t)size);
55     }
56 
TransOnUdpChannelQosEventTest(const uint8_t * data,size_t size)57     void TransOnUdpChannelQosEventTest(const uint8_t* data, size_t size)
58     {
59         if ((data == nullptr) || (size == 0)) {
60             return;
61         }
62         QosTv tvList;
63         TransOnUdpChannelQosEvent((int32_t)size, (int32_t)size, (int32_t)size, &tvList);
64     }
65 
ClientTransCloseUdpChannelTest(const uint8_t * data,size_t size)66     void ClientTransCloseUdpChannelTest(const uint8_t* data, size_t size)
67     {
68         if ((data == nullptr) || (size == 0)) {
69             return;
70         }
71         ClientTransCloseUdpChannel((int32_t)size);
72     }
73 
TransUdpChannelSendStreamTest(const uint8_t * data,size_t size)74     void TransUdpChannelSendStreamTest(const uint8_t* data, size_t size)
75     {
76         if ((data == nullptr) || (size == 0)) {
77             return;
78         }
79         char sendStringData[STR_LEN] = {0};
80         StreamData streamdata1 = {
81             sendStringData,
82             100000,
83         };
84         char str[TEST_TMP_STR_LEN] = TEST_TMP_STR;
85         StreamData streamdata2 = {
86             str,
87             10,
88         };
89         StreamFrameInfo ext = {};
90         TransUdpChannelSendStream((int32_t)size, &streamdata1, &streamdata2, &ext);
91     }
92 
TransUdpChannelSendFileTest(const uint8_t * data,size_t size)93     void TransUdpChannelSendFileTest(const uint8_t* data, size_t size)
94     {
95         if ((data == nullptr) || (size == 0)) {
96             return;
97         }
98         const char *sfileList[] = {
99             "/data/big.tar",
100             "/data/richu.jpg",
101             "/data/richu-002.jpg",
102             "/data/richu-003.jpg",
103         };
104         TransUdpChannelSendFile((int32_t)size, sfileList, NULL, (uint32_t)size);
105     }
106 
TransGetUdpChannelByFileIdTest(const uint8_t * data,size_t size)107     void TransGetUdpChannelByFileIdTest(const uint8_t* data, size_t size)
108     {
109         if ((data == nullptr) || (size == 0)) {
110             return;
111         }
112         UdpChannel udpChannel;
113         TransGetUdpChannelByFileId((int32_t)size, &udpChannel);
114     }
115 
TransUdpDeleteFileListenerlTest(const uint8_t * data,size_t size)116     void TransUdpDeleteFileListenerlTest(const uint8_t* data, size_t size)
117     {
118         if ((data == nullptr) || (size < SESSION_NAME_SIZE_MAX)) {
119             return;
120         }
121         char tmp[SESSION_NAME_SIZE_MAX + 1] = {0};
122         if (memcpy_s(tmp, sizeof(tmp) - 1, data, sizeof(tmp) - 1) != EOK) {
123             return;
124         }
125         TransUdpDeleteFileListener(tmp);
126     }
127 } // namespace OHOS
128 
129 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)130 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
131 {
132     OHOS::TransOnUdpChannelOpenedTest(data, size);
133     OHOS::TransOnUdpChannelOpenFailedTest(data, size);
134     OHOS::TransOnUdpChannelClosedTest(data, size);
135     OHOS::TransOnUdpChannelQosEventTest(data, size);
136     OHOS::ClientTransCloseUdpChannelTest(data, size);
137     OHOS::TransUdpChannelSendStreamTest(data, size);
138     OHOS::TransUdpChannelSendFileTest(data, size);
139     OHOS::TransGetUdpChannelByFileIdTest(data, size);
140     OHOS::TransUdpDeleteFileListenerlTest(data, size);
141     return 0;
142 }
143