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