1e5d0e473Sopenharmony_ci/* 2e5d0e473Sopenharmony_ci * Copyright (c) 2022-2024 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 "databasedsmsdelivery_fuzzer.h" 17e5d0e473Sopenharmony_ci 18e5d0e473Sopenharmony_ci#ifdef GTEST_API_ 19e5d0e473Sopenharmony_ci#define private public 20e5d0e473Sopenharmony_ci#endif 21e5d0e473Sopenharmony_ci 22e5d0e473Sopenharmony_ci#include "addsmstoken_fuzzer.h" 23e5d0e473Sopenharmony_ci#include "delivery_short_message_callback_stub.h" 24e5d0e473Sopenharmony_ci#include "send_short_message_callback_stub.h" 25e5d0e473Sopenharmony_ci#include "sms_interface_manager.h" 26e5d0e473Sopenharmony_ci 27e5d0e473Sopenharmony_ciusing namespace OHOS::Telephony; 28e5d0e473Sopenharmony_cinamespace OHOS { 29e5d0e473Sopenharmony_ciconstexpr int32_t SLOT_NUM = 2; 30e5d0e473Sopenharmony_cibool g_flag = false; 31e5d0e473Sopenharmony_ci 32e5d0e473Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size) 33e5d0e473Sopenharmony_ci{ 34e5d0e473Sopenharmony_ci if (data == nullptr || size == 0) { 35e5d0e473Sopenharmony_ci return; 36e5d0e473Sopenharmony_ci } 37e5d0e473Sopenharmony_ci 38e5d0e473Sopenharmony_ci if (g_flag) { 39e5d0e473Sopenharmony_ci return; 40e5d0e473Sopenharmony_ci } 41e5d0e473Sopenharmony_ci g_flag = true; 42e5d0e473Sopenharmony_ci 43e5d0e473Sopenharmony_ci int32_t slotId = static_cast<int32_t>(size % SLOT_NUM); 44e5d0e473Sopenharmony_ci auto smsInterfaceManager = std::make_shared<SmsInterfaceManager>(slotId); 45e5d0e473Sopenharmony_ci if (smsInterfaceManager == nullptr) { 46e5d0e473Sopenharmony_ci return; 47e5d0e473Sopenharmony_ci } 48e5d0e473Sopenharmony_ci 49e5d0e473Sopenharmony_ci smsInterfaceManager->InitInterfaceManager(); 50e5d0e473Sopenharmony_ci std::string desAddr(reinterpret_cast<const char *>(data), size); 51e5d0e473Sopenharmony_ci std::string scAddr(reinterpret_cast<const char *>(data), size); 52e5d0e473Sopenharmony_ci std::uint16_t port = static_cast<uint16_t>(size); 53e5d0e473Sopenharmony_ci 54e5d0e473Sopenharmony_ci const sptr<ISendShortMessageCallback> sendCallback = 55e5d0e473Sopenharmony_ci iface_cast<ISendShortMessageCallback>(new SendShortMessageCallbackStub()); 56e5d0e473Sopenharmony_ci if (sendCallback == nullptr) { 57e5d0e473Sopenharmony_ci return; 58e5d0e473Sopenharmony_ci } 59e5d0e473Sopenharmony_ci const sptr<IDeliveryShortMessageCallback> deliveryCallback = 60e5d0e473Sopenharmony_ci iface_cast<IDeliveryShortMessageCallback>(new DeliveryShortMessageCallbackStub()); 61e5d0e473Sopenharmony_ci if (deliveryCallback == nullptr) { 62e5d0e473Sopenharmony_ci return; 63e5d0e473Sopenharmony_ci } 64e5d0e473Sopenharmony_ci 65e5d0e473Sopenharmony_ci smsInterfaceManager->DataBasedSmsDelivery(desAddr, scAddr, port, data, size, sendCallback, deliveryCallback); 66e5d0e473Sopenharmony_ci auto smsSendManager = std::make_shared<SmsSendManager>(slotId); 67e5d0e473Sopenharmony_ci if (smsSendManager == nullptr) { 68e5d0e473Sopenharmony_ci return; 69e5d0e473Sopenharmony_ci } 70e5d0e473Sopenharmony_ci smsSendManager->Init(); 71e5d0e473Sopenharmony_ci smsSendManager->InitNetworkHandle(); 72e5d0e473Sopenharmony_ci smsSendManager->DataBasedSmsDelivery(desAddr, scAddr, port, data, size, sendCallback, deliveryCallback); 73e5d0e473Sopenharmony_ci 74e5d0e473Sopenharmony_ci if (smsSendManager->gsmSmsSender_ != nullptr) { 75e5d0e473Sopenharmony_ci smsSendManager->gsmSmsSender_->DataBasedSmsDelivery( 76e5d0e473Sopenharmony_ci desAddr, scAddr, port, data, size, sendCallback, deliveryCallback); 77e5d0e473Sopenharmony_ci } 78e5d0e473Sopenharmony_ci if (smsSendManager->cdmaSmsSender_ != nullptr) { 79e5d0e473Sopenharmony_ci smsSendManager->cdmaSmsSender_->DataBasedSmsDelivery( 80e5d0e473Sopenharmony_ci desAddr, scAddr, port, data, size, sendCallback, deliveryCallback); 81e5d0e473Sopenharmony_ci } 82e5d0e473Sopenharmony_ci DelayedSingleton<ImsSmsClient>::GetInstance()->UnInit(); 83e5d0e473Sopenharmony_ci smsInterfaceManager = nullptr; 84e5d0e473Sopenharmony_ci return; 85e5d0e473Sopenharmony_ci} 86e5d0e473Sopenharmony_ci} // namespace OHOS 87e5d0e473Sopenharmony_ci 88e5d0e473Sopenharmony_ci/* Fuzzer entry point */ 89e5d0e473Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 90e5d0e473Sopenharmony_ci{ 91e5d0e473Sopenharmony_ci /* Run your code on data */ 92e5d0e473Sopenharmony_ci OHOS::AddSmsTokenFuzzer token; 93e5d0e473Sopenharmony_ci OHOS::DoSomethingInterestingWithMyAPI(data, size); 94e5d0e473Sopenharmony_ci return 0; 95e5d0e473Sopenharmony_ci} 96