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 "setgetsmsc_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 "core_manager_inner.h" 24e5d0e473Sopenharmony_ci#include "sms_service.h" 25e5d0e473Sopenharmony_ci 26e5d0e473Sopenharmony_ciusing namespace OHOS::Telephony; 27e5d0e473Sopenharmony_cinamespace OHOS { 28e5d0e473Sopenharmony_cistatic bool g_isInited = false; 29e5d0e473Sopenharmony_cistatic int32_t SIM_COUNT = 2; 30e5d0e473Sopenharmony_ci 31e5d0e473Sopenharmony_cibool IsServiceInited() 32e5d0e473Sopenharmony_ci{ 33e5d0e473Sopenharmony_ci if (!g_isInited) { 34e5d0e473Sopenharmony_ci CoreManagerInner::GetInstance().isInitAllObj_ = true; 35e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::GetInstance()->registerToService_ = true; 36e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::GetInstance()->WaitCoreServiceToInit(); 37e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::GetInstance()->OnStart(); 38e5d0e473Sopenharmony_ci if (DelayedSingleton<SmsService>::GetInstance()->GetServiceRunningState() == 39e5d0e473Sopenharmony_ci static_cast<int32_t>(Telephony::ServiceRunningState::STATE_RUNNING)) { 40e5d0e473Sopenharmony_ci g_isInited = true; 41e5d0e473Sopenharmony_ci } 42e5d0e473Sopenharmony_ci } 43e5d0e473Sopenharmony_ci return g_isInited; 44e5d0e473Sopenharmony_ci} 45e5d0e473Sopenharmony_ci 46e5d0e473Sopenharmony_civoid SetSmscFuzz(const uint8_t *data, size_t size) 47e5d0e473Sopenharmony_ci{ 48e5d0e473Sopenharmony_ci if (!IsServiceInited()) { 49e5d0e473Sopenharmony_ci return; 50e5d0e473Sopenharmony_ci } 51e5d0e473Sopenharmony_ci 52e5d0e473Sopenharmony_ci MessageParcel dataParcel; 53e5d0e473Sopenharmony_ci MessageParcel replyParcel; 54e5d0e473Sopenharmony_ci MessageOption option(MessageOption::TF_SYNC); 55e5d0e473Sopenharmony_ci 56e5d0e473Sopenharmony_ci int32_t slotId = static_cast<int32_t>(size % SIM_COUNT); 57e5d0e473Sopenharmony_ci std::string smsc(reinterpret_cast<const char *>(data), size); 58e5d0e473Sopenharmony_ci auto smscU16 = Str8ToStr16(smsc); 59e5d0e473Sopenharmony_ci 60e5d0e473Sopenharmony_ci dataParcel.WriteInt32(slotId); 61e5d0e473Sopenharmony_ci dataParcel.WriteString16(smscU16); 62e5d0e473Sopenharmony_ci dataParcel.WriteBuffer(data, size); 63e5d0e473Sopenharmony_ci dataParcel.RewindRead(0); 64e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::GetInstance()->OnSetSmscAddr(dataParcel, replyParcel, option); 65e5d0e473Sopenharmony_ci 66e5d0e473Sopenharmony_ci std::shared_ptr<SmsInterfaceManager> interfaceManager = std::make_shared<SmsInterfaceManager>(slotId); 67e5d0e473Sopenharmony_ci if (interfaceManager == nullptr) { 68e5d0e473Sopenharmony_ci TELEPHONY_LOGE("interfaceManager nullptr error"); 69e5d0e473Sopenharmony_ci return; 70e5d0e473Sopenharmony_ci } 71e5d0e473Sopenharmony_ci interfaceManager->InitInterfaceManager(); 72e5d0e473Sopenharmony_ci interfaceManager->SetSmscAddr(smsc); 73e5d0e473Sopenharmony_ci} 74e5d0e473Sopenharmony_ci 75e5d0e473Sopenharmony_civoid GetSmscFuzz(const uint8_t *data, size_t size) 76e5d0e473Sopenharmony_ci{ 77e5d0e473Sopenharmony_ci if (!IsServiceInited()) { 78e5d0e473Sopenharmony_ci return; 79e5d0e473Sopenharmony_ci } 80e5d0e473Sopenharmony_ci MessageParcel dataParcel; 81e5d0e473Sopenharmony_ci MessageParcel replyParcel; 82e5d0e473Sopenharmony_ci MessageOption option(MessageOption::TF_SYNC); 83e5d0e473Sopenharmony_ci 84e5d0e473Sopenharmony_ci int32_t slotId = static_cast<int32_t>(size % SIM_COUNT); 85e5d0e473Sopenharmony_ci dataParcel.WriteInt32(slotId); 86e5d0e473Sopenharmony_ci dataParcel.WriteBuffer(data, size); 87e5d0e473Sopenharmony_ci dataParcel.RewindRead(0); 88e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::GetInstance()->OnGetSmscAddr(dataParcel, replyParcel, option); 89e5d0e473Sopenharmony_ci 90e5d0e473Sopenharmony_ci std::shared_ptr<SmsInterfaceManager> interfaceManager = std::make_shared<SmsInterfaceManager>(slotId); 91e5d0e473Sopenharmony_ci if (interfaceManager == nullptr) { 92e5d0e473Sopenharmony_ci TELEPHONY_LOGE("interfaceManager nullptr error"); 93e5d0e473Sopenharmony_ci return; 94e5d0e473Sopenharmony_ci } 95e5d0e473Sopenharmony_ci std::u16string smscAddress; 96e5d0e473Sopenharmony_ci interfaceManager->InitInterfaceManager(); 97e5d0e473Sopenharmony_ci interfaceManager->GetSmscAddr(smscAddress); 98e5d0e473Sopenharmony_ci} 99e5d0e473Sopenharmony_ci 100e5d0e473Sopenharmony_civoid DoSetGetSmscMyAPI(const uint8_t *data, size_t size) 101e5d0e473Sopenharmony_ci{ 102e5d0e473Sopenharmony_ci if (data == nullptr || size == 0) { 103e5d0e473Sopenharmony_ci return; 104e5d0e473Sopenharmony_ci } 105e5d0e473Sopenharmony_ci SetSmscFuzz(data, size); 106e5d0e473Sopenharmony_ci GetSmscFuzz(data, size); 107e5d0e473Sopenharmony_ci DelayedSingleton<SmsService>::DestroyInstance(); 108e5d0e473Sopenharmony_ci} 109e5d0e473Sopenharmony_ci} // namespace OHOS 110e5d0e473Sopenharmony_ci 111e5d0e473Sopenharmony_ci/* Fuzzer entry point */ 112e5d0e473Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 113e5d0e473Sopenharmony_ci{ 114e5d0e473Sopenharmony_ci /* Run your code on data */ 115e5d0e473Sopenharmony_ci OHOS::AddSmsTokenFuzzer token; 116e5d0e473Sopenharmony_ci OHOS::DoSetGetSmscMyAPI(data, size); 117e5d0e473Sopenharmony_ci return 0; 118e5d0e473Sopenharmony_ci} 119