146debc2cSopenharmony_ci/* 246debc2cSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 346debc2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 446debc2cSopenharmony_ci * you may not use this file except in compliance with the License. 546debc2cSopenharmony_ci * You may obtain a copy of the License at 646debc2cSopenharmony_ci * 746debc2cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 846debc2cSopenharmony_ci * 946debc2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1046debc2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1146debc2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1246debc2cSopenharmony_ci * See the License for the specific language governing permissions and 1346debc2cSopenharmony_ci * limitations under the License. 1446debc2cSopenharmony_ci */ 1546debc2cSopenharmony_ci 1646debc2cSopenharmony_ci#define TDD_ENABLE 1 1746debc2cSopenharmony_ci 1846debc2cSopenharmony_ci#include "fuzzer/FuzzedDataProvider.h" 1946debc2cSopenharmony_ci#include "napi/native_api.h" 2046debc2cSopenharmony_ci#include "scan_callback.h" 2146debc2cSopenharmony_ci#include "scancallbackstub_fuzzer.h" 2246debc2cSopenharmony_ci 2346debc2cSopenharmony_cinamespace OHOS::Scan { 2446debc2cSopenharmony_ciconstexpr uint8_t MAX_STRING_LENGTH = 255; 2546debc2cSopenharmony_ciconstexpr int MAX_SET_NUMBER = 100; 2646debc2cSopenharmony_ciconstexpr size_t FOO_MAX_LEN = 1024; 2746debc2cSopenharmony_ciconstexpr size_t U32_AT_SIZE = 4; 2846debc2cSopenharmony_ci 2946debc2cSopenharmony_civoid OnRemoteRequestFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 3046debc2cSopenharmony_ci{ 3146debc2cSopenharmony_ci uint32_t code = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 3246debc2cSopenharmony_ci MessageParcel parcelData; 3346debc2cSopenharmony_ci parcelData.WriteInterfaceToken(u"OHOS.Scan.IScanCallback"); 3446debc2cSopenharmony_ci MessageParcel reply; 3546debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 3646debc2cSopenharmony_ci MessageOption option; 3746debc2cSopenharmony_ci callBack.OnRemoteRequest(code, parcelData, reply, option); 3846debc2cSopenharmony_ci} 3946debc2cSopenharmony_ci 4046debc2cSopenharmony_civoid HandleDeviceInfoTcpEventFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4146debc2cSopenharmony_ci{ 4246debc2cSopenharmony_ci MessageParcel parcelData; 4346debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 4446debc2cSopenharmony_ci parcelData.WriteUint32(state); 4546debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 4646debc2cSopenharmony_ci MessageParcel reply; 4746debc2cSopenharmony_ci callBack.HandleDeviceInfoTcpEvent(parcelData, reply); 4846debc2cSopenharmony_ci} 4946debc2cSopenharmony_ci 5046debc2cSopenharmony_civoid HandleDeviceInfoEventFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 5146debc2cSopenharmony_ci{ 5246debc2cSopenharmony_ci MessageParcel parcelData; 5346debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 5446debc2cSopenharmony_ci parcelData.WriteUint32(state); 5546debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 5646debc2cSopenharmony_ci MessageParcel reply; 5746debc2cSopenharmony_ci callBack.HandleDeviceInfoEvent(parcelData, reply); 5846debc2cSopenharmony_ci} 5946debc2cSopenharmony_ci 6046debc2cSopenharmony_civoid HandleDeviceInfoSyncEventFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 6146debc2cSopenharmony_ci{ 6246debc2cSopenharmony_ci MessageParcel parcelData; 6346debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 6446debc2cSopenharmony_ci parcelData.WriteUint32(state); 6546debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 6646debc2cSopenharmony_ci MessageParcel reply; 6746debc2cSopenharmony_ci callBack.HandleDeviceInfoSyncEvent(parcelData, reply); 6846debc2cSopenharmony_ci} 6946debc2cSopenharmony_ci 7046debc2cSopenharmony_civoid HandleGetFrameResEventFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 7146debc2cSopenharmony_ci{ 7246debc2cSopenharmony_ci MessageParcel parcelData; 7346debc2cSopenharmony_ci bool isGetSucc = dataProvider->ConsumeBool(); 7446debc2cSopenharmony_ci parcelData.WriteBool(isGetSucc); 7546debc2cSopenharmony_ci int32_t sizeRead = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 7646debc2cSopenharmony_ci parcelData.WriteInt32(sizeRead); 7746debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 7846debc2cSopenharmony_ci MessageParcel reply; 7946debc2cSopenharmony_ci callBack.HandleGetFrameResEvent(parcelData, reply); 8046debc2cSopenharmony_ci} 8146debc2cSopenharmony_ci 8246debc2cSopenharmony_civoid HandleScanInitEventFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 8346debc2cSopenharmony_ci{ 8446debc2cSopenharmony_ci MessageParcel parcelData; 8546debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 8646debc2cSopenharmony_ci parcelData.WriteInt32(scanVersion); 8746debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 8846debc2cSopenharmony_ci MessageParcel reply; 8946debc2cSopenharmony_ci callBack.HandleScanInitEvent(parcelData, reply); 9046debc2cSopenharmony_ci} 9146debc2cSopenharmony_ci 9246debc2cSopenharmony_civoid HandleSendSearchMessageFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 9346debc2cSopenharmony_ci{ 9446debc2cSopenharmony_ci MessageParcel parcelData; 9546debc2cSopenharmony_ci std::string message = parcelData.ReadString(); 9646debc2cSopenharmony_ci parcelData.WriteString(message); 9746debc2cSopenharmony_ci message = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 9846debc2cSopenharmony_ci parcelData.WriteString(message); 9946debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 10046debc2cSopenharmony_ci MessageParcel reply; 10146debc2cSopenharmony_ci callBack.HandleSendSearchMessage(parcelData, reply); 10246debc2cSopenharmony_ci} 10346debc2cSopenharmony_ci 10446debc2cSopenharmony_civoid HandleSendDeviceListFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 10546debc2cSopenharmony_ci{ 10646debc2cSopenharmony_ci MessageParcel parcelData; 10746debc2cSopenharmony_ci int32_t infosSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 10846debc2cSopenharmony_ci parcelData.WriteInt32(infosSize); 10946debc2cSopenharmony_ci std::vector<ScanDeviceInfo> infos(infosSize); 11046debc2cSopenharmony_ci for (size_t i = 0; i < infos.size(); i++) { 11146debc2cSopenharmony_ci infos[i].Marshalling(parcelData); 11246debc2cSopenharmony_ci } 11346debc2cSopenharmony_ci ScanCallback callBack(nullptr, nullptr); 11446debc2cSopenharmony_ci MessageParcel reply; 11546debc2cSopenharmony_ci callBack.HandleSendDeviceList(parcelData, reply); 11646debc2cSopenharmony_ci} 11746debc2cSopenharmony_ci 11846debc2cSopenharmony_ci} 11946debc2cSopenharmony_ci 12046debc2cSopenharmony_ci/* Fuzzer entry point */ 12146debc2cSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 12246debc2cSopenharmony_ci{ 12346debc2cSopenharmony_ci if (data == nullptr) { 12446debc2cSopenharmony_ci return 0; 12546debc2cSopenharmony_ci } 12646debc2cSopenharmony_ci 12746debc2cSopenharmony_ci if (size < OHOS::Scan::U32_AT_SIZE || size > OHOS::Scan::FOO_MAX_LEN) { 12846debc2cSopenharmony_ci return 0; 12946debc2cSopenharmony_ci } 13046debc2cSopenharmony_ci FuzzedDataProvider dataProvider(data, size); 13146debc2cSopenharmony_ci OHOS::Scan::OnRemoteRequestFuzzTest(data, size, &dataProvider); 13246debc2cSopenharmony_ci OHOS::Scan::HandleDeviceInfoTcpEventFuzzTest(data, size, &dataProvider); 13346debc2cSopenharmony_ci OHOS::Scan::HandleDeviceInfoEventFuzzTest(data, size, &dataProvider); 13446debc2cSopenharmony_ci OHOS::Scan::HandleDeviceInfoSyncEventFuzzTest(data, size, &dataProvider); 13546debc2cSopenharmony_ci OHOS::Scan::HandleGetFrameResEventFuzzTest(data, size, &dataProvider); 13646debc2cSopenharmony_ci OHOS::Scan::HandleScanInitEventFuzzTest(data, size, &dataProvider); 13746debc2cSopenharmony_ci OHOS::Scan::HandleSendSearchMessageFuzzTest(data, size, &dataProvider); 13846debc2cSopenharmony_ci OHOS::Scan::HandleSendDeviceListFuzzTest(data, size, &dataProvider); 13946debc2cSopenharmony_ci return 0; 14046debc2cSopenharmony_ci} 14146debc2cSopenharmony_ci 142