1e5d0e473Sopenharmony_ci/*
2e5d0e473Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3e5d0e473Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e5d0e473Sopenharmony_ci * you may not use this file except in compliance with the License.
5e5d0e473Sopenharmony_ci * You may obtain a copy of the License at
6e5d0e473Sopenharmony_ci *
7e5d0e473Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e5d0e473Sopenharmony_ci *
9e5d0e473Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e5d0e473Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e5d0e473Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e5d0e473Sopenharmony_ci * See the License for the specific language governing permissions and
13e5d0e473Sopenharmony_ci * limitations under the License.
14e5d0e473Sopenharmony_ci */
15e5d0e473Sopenharmony_ci
16e5d0e473Sopenharmony_ci#include "cdmasmsencode_fuzzer.h"
17e5d0e473Sopenharmony_ci
18e5d0e473Sopenharmony_ci#include "addsmstoken_fuzzer.h"
19e5d0e473Sopenharmony_ci#include "cdma_sms_sub_parameter.h"
20e5d0e473Sopenharmony_ci#include "cdma_sms_transport_message.h"
21e5d0e473Sopenharmony_ci#include "securec.h"
22e5d0e473Sopenharmony_ci
23e5d0e473Sopenharmony_ciusing namespace OHOS::Telephony;
24e5d0e473Sopenharmony_cinamespace OHOS {
25e5d0e473Sopenharmony_cibool g_flag = false;
26e5d0e473Sopenharmony_ciconstexpr int32_t BOOL_NUM = 2;
27e5d0e473Sopenharmony_ci
28e5d0e473Sopenharmony_civoid TeleserviceIdEncode(const uint8_t *data, size_t size)
29e5d0e473Sopenharmony_ci{
30e5d0e473Sopenharmony_ci    uint16_t value;
31e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
32e5d0e473Sopenharmony_ci        return;
33e5d0e473Sopenharmony_ci    }
34e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsTeleserviceId>(value);
35e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
36e5d0e473Sopenharmony_ci        return;
37e5d0e473Sopenharmony_ci    }
38e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
39e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
40e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
41e5d0e473Sopenharmony_ci}
42e5d0e473Sopenharmony_ci
43e5d0e473Sopenharmony_civoid ServiceCategoryEncode(const uint8_t *data, size_t size)
44e5d0e473Sopenharmony_ci{
45e5d0e473Sopenharmony_ci    uint16_t value;
46e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
47e5d0e473Sopenharmony_ci        return;
48e5d0e473Sopenharmony_ci    }
49e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsServiceCategory>(value);
50e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
51e5d0e473Sopenharmony_ci        return;
52e5d0e473Sopenharmony_ci    }
53e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
54e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
55e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
56e5d0e473Sopenharmony_ci}
57e5d0e473Sopenharmony_ci
58e5d0e473Sopenharmony_civoid BearerReplyEncode(const uint8_t *data, size_t size)
59e5d0e473Sopenharmony_ci{
60e5d0e473Sopenharmony_ci    uint8_t value;
61e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
62e5d0e473Sopenharmony_ci        return;
63e5d0e473Sopenharmony_ci    }
64e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsBearerReply>(value);
65e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
66e5d0e473Sopenharmony_ci        return;
67e5d0e473Sopenharmony_ci    }
68e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
69e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
70e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
71e5d0e473Sopenharmony_ci}
72e5d0e473Sopenharmony_ci
73e5d0e473Sopenharmony_civoid CauseCodesEncode(const uint8_t *data, size_t size)
74e5d0e473Sopenharmony_ci{
75e5d0e473Sopenharmony_ci    TransportCauseCode value;
76e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
77e5d0e473Sopenharmony_ci        return;
78e5d0e473Sopenharmony_ci    }
79e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsCauseCodes>(value);
80e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
81e5d0e473Sopenharmony_ci        return;
82e5d0e473Sopenharmony_ci    }
83e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
84e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
85e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
86e5d0e473Sopenharmony_ci}
87e5d0e473Sopenharmony_ci
88e5d0e473Sopenharmony_civoid AddressParameterEncode(const uint8_t *data, size_t size)
89e5d0e473Sopenharmony_ci{
90e5d0e473Sopenharmony_ci    TransportAddr value;
91e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
92e5d0e473Sopenharmony_ci        return;
93e5d0e473Sopenharmony_ci    }
94e5d0e473Sopenharmony_ci    value.digitMode = static_cast<bool>(size % BOOL_NUM);
95e5d0e473Sopenharmony_ci    value.numberMode = static_cast<bool>(size % BOOL_NUM);
96e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsAddressParameter>(value, CdmaSmsParameterRecord::ORG_ADDRESS);
97e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
98e5d0e473Sopenharmony_ci        return;
99e5d0e473Sopenharmony_ci    }
100e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
101e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
102e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
103e5d0e473Sopenharmony_ci}
104e5d0e473Sopenharmony_ci
105e5d0e473Sopenharmony_civoid SubaddressEncode(const uint8_t *data, size_t size)
106e5d0e473Sopenharmony_ci{
107e5d0e473Sopenharmony_ci    TransportSubAddr value;
108e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
109e5d0e473Sopenharmony_ci        return;
110e5d0e473Sopenharmony_ci    }
111e5d0e473Sopenharmony_ci    value.odd = static_cast<bool>(size % BOOL_NUM);
112e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsSubaddress>(value, CdmaSmsParameterRecord::ORG_SUB_ADDRESS);
113e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
114e5d0e473Sopenharmony_ci        return;
115e5d0e473Sopenharmony_ci    }
116e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
117e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
118e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
119e5d0e473Sopenharmony_ci}
120e5d0e473Sopenharmony_ci
121e5d0e473Sopenharmony_civoid BearerDataEncode(const uint8_t *data, size_t size)
122e5d0e473Sopenharmony_ci{
123e5d0e473Sopenharmony_ci    CdmaTeleserviceMsg value;
124e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
125e5d0e473Sopenharmony_ci        return;
126e5d0e473Sopenharmony_ci    }
127e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsBearerData>(value);
128e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
129e5d0e473Sopenharmony_ci        return;
130e5d0e473Sopenharmony_ci    }
131e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
132e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
133e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
134e5d0e473Sopenharmony_ci}
135e5d0e473Sopenharmony_ci
136e5d0e473Sopenharmony_civoid BaseParameterEncode(const uint8_t *data, size_t size)
137e5d0e473Sopenharmony_ci{
138e5d0e473Sopenharmony_ci    uint8_t value;
139e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
140e5d0e473Sopenharmony_ci        return;
141e5d0e473Sopenharmony_ci    }
142e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsBaseParameter>(CdmaSmsSubParameter::MESSAGE_IDENTIFIER, value);
143e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
144e5d0e473Sopenharmony_ci        return;
145e5d0e473Sopenharmony_ci    }
146e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
147e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
148e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
149e5d0e473Sopenharmony_ci}
150e5d0e473Sopenharmony_ci
151e5d0e473Sopenharmony_civoid ReservedParameterEncode(const uint8_t *data, size_t size)
152e5d0e473Sopenharmony_ci{
153e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsReservedParameter>(CdmaSmsSubParameter::MESSAGE_IDENTIFIER);
154e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
155e5d0e473Sopenharmony_ci        return;
156e5d0e473Sopenharmony_ci    }
157e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
158e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
159e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
160e5d0e473Sopenharmony_ci}
161e5d0e473Sopenharmony_ci
162e5d0e473Sopenharmony_civoid MessageIdEncode(const uint8_t *data, size_t size)
163e5d0e473Sopenharmony_ci{
164e5d0e473Sopenharmony_ci    SmsTeleSvcMsgId value;
165e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
166e5d0e473Sopenharmony_ci        return;
167e5d0e473Sopenharmony_ci    }
168e5d0e473Sopenharmony_ci    value.headerInd = static_cast<bool>(size % BOOL_NUM);
169e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsMessageId>(value, CdmaSmsTeleserviceMessage::DELIVER);
170e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
171e5d0e473Sopenharmony_ci        return;
172e5d0e473Sopenharmony_ci    }
173e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
174e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
175e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
176e5d0e473Sopenharmony_ci}
177e5d0e473Sopenharmony_ci
178e5d0e473Sopenharmony_civoid AbsoluteTimeEncode(const uint8_t *data, size_t size)
179e5d0e473Sopenharmony_ci{
180e5d0e473Sopenharmony_ci    SmsTimeAbs value;
181e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
182e5d0e473Sopenharmony_ci        return;
183e5d0e473Sopenharmony_ci    }
184e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsAbsoluteTime>(CdmaSmsSubParameter::VALIDITY_PERIOD_ABSOLUTE, value);
185e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
186e5d0e473Sopenharmony_ci        return;
187e5d0e473Sopenharmony_ci    }
188e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
189e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
190e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
191e5d0e473Sopenharmony_ci}
192e5d0e473Sopenharmony_ci
193e5d0e473Sopenharmony_civoid PriorityIndEncode(const uint8_t *data, size_t size)
194e5d0e473Sopenharmony_ci{
195e5d0e473Sopenharmony_ci    SmsPriorityIndicator value;
196e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
197e5d0e473Sopenharmony_ci        return;
198e5d0e473Sopenharmony_ci    }
199e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsPriorityInd>(value);
200e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
201e5d0e473Sopenharmony_ci        return;
202e5d0e473Sopenharmony_ci    }
203e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
204e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
205e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
206e5d0e473Sopenharmony_ci}
207e5d0e473Sopenharmony_ci
208e5d0e473Sopenharmony_civoid PrivacyIndEncode(const uint8_t *data, size_t size)
209e5d0e473Sopenharmony_ci{
210e5d0e473Sopenharmony_ci    SmsPrivacyIndicator value;
211e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
212e5d0e473Sopenharmony_ci        return;
213e5d0e473Sopenharmony_ci    }
214e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsPrivacyInd>(value);
215e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
216e5d0e473Sopenharmony_ci        return;
217e5d0e473Sopenharmony_ci    }
218e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
219e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
220e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
221e5d0e473Sopenharmony_ci}
222e5d0e473Sopenharmony_ci
223e5d0e473Sopenharmony_civoid ReplyOptionEncode(const uint8_t *data, size_t size)
224e5d0e473Sopenharmony_ci{
225e5d0e473Sopenharmony_ci    SmsReplyOption value;
226e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
227e5d0e473Sopenharmony_ci        return;
228e5d0e473Sopenharmony_ci    }
229e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsReplyOption>(value);
230e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
231e5d0e473Sopenharmony_ci        return;
232e5d0e473Sopenharmony_ci    }
233e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
234e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
235e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
236e5d0e473Sopenharmony_ci}
237e5d0e473Sopenharmony_ci
238e5d0e473Sopenharmony_civoid UserDataEncode(const uint8_t *data, size_t size)
239e5d0e473Sopenharmony_ci{
240e5d0e473Sopenharmony_ci    SmsTeleSvcUserData value;
241e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
242e5d0e473Sopenharmony_ci        return;
243e5d0e473Sopenharmony_ci    }
244e5d0e473Sopenharmony_ci    bool headerInd = false;
245e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsUserData>(value, headerInd);
246e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
247e5d0e473Sopenharmony_ci        return;
248e5d0e473Sopenharmony_ci    }
249e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
250e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
251e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
252e5d0e473Sopenharmony_ci}
253e5d0e473Sopenharmony_ci
254e5d0e473Sopenharmony_civoid CmasDataEncode(const uint8_t *data, size_t size)
255e5d0e473Sopenharmony_ci{
256e5d0e473Sopenharmony_ci    SmsTeleSvcCmasData value;
257e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
258e5d0e473Sopenharmony_ci        return;
259e5d0e473Sopenharmony_ci    }
260e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsCmasData>(value);
261e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
262e5d0e473Sopenharmony_ci        return;
263e5d0e473Sopenharmony_ci    }
264e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
265e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
266e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
267e5d0e473Sopenharmony_ci}
268e5d0e473Sopenharmony_ci
269e5d0e473Sopenharmony_civoid AlertPriorityEncode(const uint8_t *data, size_t size)
270e5d0e473Sopenharmony_ci{
271e5d0e473Sopenharmony_ci    SmsAlertPriority value;
272e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
273e5d0e473Sopenharmony_ci        return;
274e5d0e473Sopenharmony_ci    }
275e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsAlertPriority>(value);
276e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
277e5d0e473Sopenharmony_ci        return;
278e5d0e473Sopenharmony_ci    }
279e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
280e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
281e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
282e5d0e473Sopenharmony_ci}
283e5d0e473Sopenharmony_civoid LanguageIndEncode(const uint8_t *data, size_t size)
284e5d0e473Sopenharmony_ci{
285e5d0e473Sopenharmony_ci    SmsLanguageType value;
286e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
287e5d0e473Sopenharmony_ci        return;
288e5d0e473Sopenharmony_ci    }
289e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsLanguageInd>(value);
290e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
291e5d0e473Sopenharmony_ci        return;
292e5d0e473Sopenharmony_ci    }
293e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
294e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
295e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
296e5d0e473Sopenharmony_ci}
297e5d0e473Sopenharmony_civoid CallbackNumberEncode(const uint8_t *data, size_t size)
298e5d0e473Sopenharmony_ci{
299e5d0e473Sopenharmony_ci    SmsTeleSvcAddr value;
300e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
301e5d0e473Sopenharmony_ci        return;
302e5d0e473Sopenharmony_ci    }
303e5d0e473Sopenharmony_ci    value.digitMode = static_cast<bool>(size % BOOL_NUM);
304e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsCallbackNumber>(value);
305e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
306e5d0e473Sopenharmony_ci        return;
307e5d0e473Sopenharmony_ci    }
308e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
309e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
310e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
311e5d0e473Sopenharmony_ci}
312e5d0e473Sopenharmony_civoid DepositIndexEncode(const uint8_t *data, size_t size)
313e5d0e473Sopenharmony_ci{
314e5d0e473Sopenharmony_ci    uint16_t value;
315e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
316e5d0e473Sopenharmony_ci        return;
317e5d0e473Sopenharmony_ci    }
318e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsDepositIndex>(value);
319e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
320e5d0e473Sopenharmony_ci        return;
321e5d0e473Sopenharmony_ci    }
322e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
323e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
324e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
325e5d0e473Sopenharmony_ci}
326e5d0e473Sopenharmony_civoid DisplayModeEncode(const uint8_t *data, size_t size)
327e5d0e473Sopenharmony_ci{
328e5d0e473Sopenharmony_ci    SmsDisplayMode value;
329e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
330e5d0e473Sopenharmony_ci        return;
331e5d0e473Sopenharmony_ci    }
332e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsDisplayMode>(value);
333e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
334e5d0e473Sopenharmony_ci        return;
335e5d0e473Sopenharmony_ci    }
336e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
337e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
338e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
339e5d0e473Sopenharmony_ci}
340e5d0e473Sopenharmony_civoid MessageStatusEncode(const uint8_t *data, size_t size)
341e5d0e473Sopenharmony_ci{
342e5d0e473Sopenharmony_ci    SmsStatusCode value;
343e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
344e5d0e473Sopenharmony_ci        return;
345e5d0e473Sopenharmony_ci    }
346e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsMessageStatus>(value);
347e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
348e5d0e473Sopenharmony_ci        return;
349e5d0e473Sopenharmony_ci    }
350e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
351e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
352e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
353e5d0e473Sopenharmony_ci}
354e5d0e473Sopenharmony_civoid NumberMessagesEncode(const uint8_t *data, size_t size)
355e5d0e473Sopenharmony_ci{
356e5d0e473Sopenharmony_ci    uint32_t value;
357e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
358e5d0e473Sopenharmony_ci        return;
359e5d0e473Sopenharmony_ci    }
360e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsNumberMessages>(value);
361e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
362e5d0e473Sopenharmony_ci        return;
363e5d0e473Sopenharmony_ci    }
364e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
365e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
366e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
367e5d0e473Sopenharmony_ci}
368e5d0e473Sopenharmony_civoid EnhancedVmnEncode(const uint8_t *data, size_t size)
369e5d0e473Sopenharmony_ci{
370e5d0e473Sopenharmony_ci    SmsEnhancedVmn value;
371e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
372e5d0e473Sopenharmony_ci        return;
373e5d0e473Sopenharmony_ci    }
374e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsEnhancedVmn>(value);
375e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
376e5d0e473Sopenharmony_ci        return;
377e5d0e473Sopenharmony_ci    }
378e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
379e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
380e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
381e5d0e473Sopenharmony_ci}
382e5d0e473Sopenharmony_civoid EnhancedVmnAckEncode(const uint8_t *data, size_t size)
383e5d0e473Sopenharmony_ci{
384e5d0e473Sopenharmony_ci    SmsEnhancedVmnAck value;
385e5d0e473Sopenharmony_ci    if (memcpy_s(&value, sizeof(value), data, size) != EOK) {
386e5d0e473Sopenharmony_ci        return;
387e5d0e473Sopenharmony_ci    }
388e5d0e473Sopenharmony_ci    auto parameter = std::make_unique<CdmaSmsEnhancedVmnAck>(value);
389e5d0e473Sopenharmony_ci    if (parameter == nullptr) {
390e5d0e473Sopenharmony_ci        return;
391e5d0e473Sopenharmony_ci    }
392e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
393e5d0e473Sopenharmony_ci    parameter->Encode(pdu);
394e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
395e5d0e473Sopenharmony_ci}
396e5d0e473Sopenharmony_ci
397e5d0e473Sopenharmony_civoid TransportMessageEncode(const uint8_t *data, size_t size)
398e5d0e473Sopenharmony_ci{
399e5d0e473Sopenharmony_ci    SmsWriteBuffer pdu;
400e5d0e473Sopenharmony_ci    CdmaTransportMsg msg;
401e5d0e473Sopenharmony_ci    if (memcpy_s(&msg, sizeof(msg), data, size) != EOK) {
402e5d0e473Sopenharmony_ci        return;
403e5d0e473Sopenharmony_ci    }
404e5d0e473Sopenharmony_ci    auto message = CdmaSmsTransportMessage::CreateTransportMessage(msg);
405e5d0e473Sopenharmony_ci    if (message == nullptr) {
406e5d0e473Sopenharmony_ci        return;
407e5d0e473Sopenharmony_ci    }
408e5d0e473Sopenharmony_ci    message->Encode(pdu);
409e5d0e473Sopenharmony_ci    auto pduBuffer = pdu.GetPduBuffer();
410e5d0e473Sopenharmony_ci
411e5d0e473Sopenharmony_ci    SmsWriteBuffer wBuffer1;
412e5d0e473Sopenharmony_ci    msg.type = CdmaTransportMsgType::P2P;
413e5d0e473Sopenharmony_ci    auto message1 = CdmaSmsTransportMessage::CreateTransportMessage(msg);
414e5d0e473Sopenharmony_ci    if (message1 == nullptr) {
415e5d0e473Sopenharmony_ci        return;
416e5d0e473Sopenharmony_ci    }
417e5d0e473Sopenharmony_ci    message1->Encode(wBuffer1);
418e5d0e473Sopenharmony_ci    auto pduBuffer1 = wBuffer1.GetPduBuffer();
419e5d0e473Sopenharmony_ci
420e5d0e473Sopenharmony_ci    SmsWriteBuffer wBuffer2;
421e5d0e473Sopenharmony_ci    msg.type = CdmaTransportMsgType::BROADCAST;
422e5d0e473Sopenharmony_ci    auto message2 = CdmaSmsTransportMessage::CreateTransportMessage(msg);
423e5d0e473Sopenharmony_ci    if (message2 == nullptr) {
424e5d0e473Sopenharmony_ci        return;
425e5d0e473Sopenharmony_ci    }
426e5d0e473Sopenharmony_ci    message2->Encode(wBuffer2);
427e5d0e473Sopenharmony_ci    auto pduBuffer2 = wBuffer2.GetPduBuffer();
428e5d0e473Sopenharmony_ci
429e5d0e473Sopenharmony_ci    SmsWriteBuffer wBuffer3;
430e5d0e473Sopenharmony_ci    msg.type = CdmaTransportMsgType::ACK;
431e5d0e473Sopenharmony_ci    auto message3 = CdmaSmsTransportMessage::CreateTransportMessage(msg);
432e5d0e473Sopenharmony_ci    if (message3 == nullptr) {
433e5d0e473Sopenharmony_ci        return;
434e5d0e473Sopenharmony_ci    }
435e5d0e473Sopenharmony_ci    message3->Encode(wBuffer3);
436e5d0e473Sopenharmony_ci    auto pduBuffer3 = wBuffer3.GetPduBuffer();
437e5d0e473Sopenharmony_ci}
438e5d0e473Sopenharmony_ci
439e5d0e473Sopenharmony_civoid ParameterRecordEncode(const uint8_t *data, size_t size)
440e5d0e473Sopenharmony_ci{
441e5d0e473Sopenharmony_ci    TeleserviceIdEncode(data, size);
442e5d0e473Sopenharmony_ci    ServiceCategoryEncode(data, size);
443e5d0e473Sopenharmony_ci    BearerReplyEncode(data, size);
444e5d0e473Sopenharmony_ci    CauseCodesEncode(data, size);
445e5d0e473Sopenharmony_ci    AddressParameterEncode(data, size);
446e5d0e473Sopenharmony_ci    SubaddressEncode(data, size);
447e5d0e473Sopenharmony_ci    BearerDataEncode(data, size);
448e5d0e473Sopenharmony_ci}
449e5d0e473Sopenharmony_ci
450e5d0e473Sopenharmony_civoid SubParameterEncode(const uint8_t *data, size_t size)
451e5d0e473Sopenharmony_ci{
452e5d0e473Sopenharmony_ci    BaseParameterEncode(data, size);
453e5d0e473Sopenharmony_ci    ReservedParameterEncode(data, size);
454e5d0e473Sopenharmony_ci    MessageIdEncode(data, size);
455e5d0e473Sopenharmony_ci    AbsoluteTimeEncode(data, size);
456e5d0e473Sopenharmony_ci    PriorityIndEncode(data, size);
457e5d0e473Sopenharmony_ci    PrivacyIndEncode(data, size);
458e5d0e473Sopenharmony_ci    ReplyOptionEncode(data, size);
459e5d0e473Sopenharmony_ci    UserDataEncode(data, size);
460e5d0e473Sopenharmony_ci    CmasDataEncode(data, size);
461e5d0e473Sopenharmony_ci    AlertPriorityEncode(data, size);
462e5d0e473Sopenharmony_ci    LanguageIndEncode(data, size);
463e5d0e473Sopenharmony_ci    CallbackNumberEncode(data, size);
464e5d0e473Sopenharmony_ci    DepositIndexEncode(data, size);
465e5d0e473Sopenharmony_ci    DisplayModeEncode(data, size);
466e5d0e473Sopenharmony_ci    MessageStatusEncode(data, size);
467e5d0e473Sopenharmony_ci    NumberMessagesEncode(data, size);
468e5d0e473Sopenharmony_ci    EnhancedVmnEncode(data, size);
469e5d0e473Sopenharmony_ci    EnhancedVmnAckEncode(data, size);
470e5d0e473Sopenharmony_ci}
471e5d0e473Sopenharmony_ci
472e5d0e473Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
473e5d0e473Sopenharmony_ci{
474e5d0e473Sopenharmony_ci    if (data == nullptr || size == 0) {
475e5d0e473Sopenharmony_ci        return;
476e5d0e473Sopenharmony_ci    }
477e5d0e473Sopenharmony_ci
478e5d0e473Sopenharmony_ci    if (g_flag) {
479e5d0e473Sopenharmony_ci        return;
480e5d0e473Sopenharmony_ci    }
481e5d0e473Sopenharmony_ci    g_flag = true;
482e5d0e473Sopenharmony_ci
483e5d0e473Sopenharmony_ci    TransportMessageEncode(data, size);
484e5d0e473Sopenharmony_ci    ParameterRecordEncode(data, size);
485e5d0e473Sopenharmony_ci    SubParameterEncode(data, size);
486e5d0e473Sopenharmony_ci}
487e5d0e473Sopenharmony_ci
488e5d0e473Sopenharmony_ci} // namespace OHOS
489e5d0e473Sopenharmony_ci
490e5d0e473Sopenharmony_ci/* Fuzzer entry point */
491e5d0e473Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
492e5d0e473Sopenharmony_ci{
493e5d0e473Sopenharmony_ci    /* Run your code on data */
494e5d0e473Sopenharmony_ci    OHOS::AddSmsTokenFuzzer token;
495e5d0e473Sopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(data, size);
496e5d0e473Sopenharmony_ci    return 0;
497e5d0e473Sopenharmony_ci}
498