1 /*
2 * Copyright (c) 2022-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 "clienttransudpmanager_fuzzer.h"
17
18 #include <securec.h>
19
20 #include "client_trans_udp_manager.h"
21 #include "session.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(static_cast<int32_t>(size), static_cast<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(static_cast<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(
62 static_cast<int32_t>(size), static_cast<int32_t>(size), static_cast<int32_t>(size), &tvList);
63 }
64
ClientTransCloseUdpChannelTest(const uint8_t * data,size_t size)65 void ClientTransCloseUdpChannelTest(const uint8_t *data, size_t size)
66 {
67 if ((data == nullptr) || (size == 0)) {
68 return;
69 }
70 ClientTransCloseUdpChannel(static_cast<int32_t>(size), SHUTDOWN_REASON_UNKNOWN);
71 }
72
TransUdpChannelSendStreamTest(const uint8_t * data,size_t size)73 void TransUdpChannelSendStreamTest(const uint8_t *data, size_t size)
74 {
75 if ((data == nullptr) || (size == 0)) {
76 return;
77 }
78 char sendStringData[STR_LEN] = {0};
79 StreamData streamdata1 = {
80 sendStringData,
81 100000,
82 };
83 char str[TEST_TMP_STR_LEN] = TEST_TMP_STR;
84 StreamData streamdata2 = {
85 str,
86 10,
87 };
88 StreamFrameInfo ext = {};
89 TransUdpChannelSendStream(static_cast<int32_t>(size), &streamdata1, &streamdata2, &ext);
90 }
91
TransUdpChannelSendFileTest(const uint8_t * data,size_t size)92 void TransUdpChannelSendFileTest(const uint8_t *data, size_t size)
93 {
94 if ((data == nullptr) || (size == 0)) {
95 return;
96 }
97 const char *sfileList[] = {
98 "/data/big.tar",
99 "/data/richu.jpg",
100 "/data/richu-002.jpg",
101 "/data/richu-003.jpg",
102 };
103 TransUdpChannelSendFile(static_cast<int32_t>(size), sfileList, NULL, static_cast<uint32_t>(size));
104 }
105
TransGetUdpChannelByFileIdTest(const uint8_t * data,size_t size)106 void TransGetUdpChannelByFileIdTest(const uint8_t *data, size_t size)
107 {
108 if ((data == nullptr) || (size == 0)) {
109 return;
110 }
111 UdpChannel udpChannel;
112 TransGetUdpChannelByFileId(static_cast<int32_t>(size), &udpChannel);
113 }
114
TransUdpDeleteFileListenerlTest(const uint8_t * data,size_t size)115 void TransUdpDeleteFileListenerlTest(const uint8_t *data, size_t size)
116 {
117 if ((data == nullptr) || (size < SESSION_NAME_SIZE_MAX)) {
118 return;
119 }
120 char tmp[SESSION_NAME_SIZE_MAX + 1] = {0};
121 if (memcpy_s(tmp, sizeof(tmp) - 1, data, sizeof(tmp) - 1) != EOK) {
122 return;
123 }
124 TransUdpDeleteFileListener(tmp);
125 }
126 } // namespace OHOS
127
128 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)129 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
130 {
131 OHOS::TransOnUdpChannelOpenedTest(data, size);
132 OHOS::TransOnUdpChannelOpenFailedTest(data, size);
133 OHOS::TransOnUdpChannelClosedTest(data, size);
134 OHOS::TransOnUdpChannelQosEventTest(data, size);
135 OHOS::ClientTransCloseUdpChannelTest(data, size);
136 OHOS::TransUdpChannelSendStreamTest(data, size);
137 OHOS::TransUdpChannelSendFileTest(data, size);
138 OHOS::TransGetUdpChannelByFileIdTest(data, size);
139 OHOS::TransUdpDeleteFileListenerlTest(data, size);
140 return 0;
141 }
142