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