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