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#include "fuzzer/FuzzedDataProvider.h" 1646debc2cSopenharmony_ci#include "scancallbackproxy_fuzzer.h" 1746debc2cSopenharmony_ci#include "scan_callback_proxy.h" 1846debc2cSopenharmony_ci 1946debc2cSopenharmony_cinamespace OHOS { 2046debc2cSopenharmony_cinamespace Scan { 2146debc2cSopenharmony_ci constexpr uint8_t MAX_STRING_LENGTH = 255; 2246debc2cSopenharmony_ci constexpr int MAX_SET_NUMBER = 100; 2346debc2cSopenharmony_ci constexpr size_t FOO_MAX_LEN = 1024; 2446debc2cSopenharmony_ci constexpr size_t U32_AT_SIZE = 4; 2546debc2cSopenharmony_ci 2646debc2cSopenharmony_ci void TestTcpOnCallback(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 2746debc2cSopenharmony_ci { 2846debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 2946debc2cSopenharmony_ci ScanDeviceInfoTCP info; 3046debc2cSopenharmony_ci sptr<IRemoteObject> impl; 3146debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 3246debc2cSopenharmony_ci scanCallbackProxy.OnCallback(state, info); 3346debc2cSopenharmony_ci } 3446debc2cSopenharmony_ci 3546debc2cSopenharmony_ci void TestUsbOnCallback(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 3646debc2cSopenharmony_ci { 3746debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 3846debc2cSopenharmony_ci ScanDeviceInfo info; 3946debc2cSopenharmony_ci sptr<IRemoteObject> impl; 4046debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 4146debc2cSopenharmony_ci scanCallbackProxy.OnCallback(state, info); 4246debc2cSopenharmony_ci } 4346debc2cSopenharmony_ci 4446debc2cSopenharmony_ci void TestOnCallbackSync(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4546debc2cSopenharmony_ci { 4646debc2cSopenharmony_ci uint32_t state = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 4746debc2cSopenharmony_ci ScanDeviceInfoSync info; 4846debc2cSopenharmony_ci sptr<IRemoteObject> impl; 4946debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 5046debc2cSopenharmony_ci scanCallbackProxy.OnCallbackSync(state, info); 5146debc2cSopenharmony_ci } 5246debc2cSopenharmony_ci 5346debc2cSopenharmony_ci void TestOnGetFrameResCallback(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 5446debc2cSopenharmony_ci { 5546debc2cSopenharmony_ci bool isGetSucc = dataProvider->ConsumeBool(); 5646debc2cSopenharmony_ci int32_t sizeRead = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 5746debc2cSopenharmony_ci sptr<IRemoteObject> impl; 5846debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 5946debc2cSopenharmony_ci scanCallbackProxy.OnGetFrameResCallback(isGetSucc, sizeRead); 6046debc2cSopenharmony_ci } 6146debc2cSopenharmony_ci 6246debc2cSopenharmony_ci void TestOnScanInitCallback(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 6346debc2cSopenharmony_ci { 6446debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 6546debc2cSopenharmony_ci sptr<IRemoteObject> impl; 6646debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 6746debc2cSopenharmony_ci scanCallbackProxy.OnScanInitCallback(scanVersion); 6846debc2cSopenharmony_ci } 6946debc2cSopenharmony_ci 7046debc2cSopenharmony_ci void TestOnSendSearchMessage(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 7146debc2cSopenharmony_ci { 7246debc2cSopenharmony_ci std::string message = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 7346debc2cSopenharmony_ci sptr<IRemoteObject> impl; 7446debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 7546debc2cSopenharmony_ci scanCallbackProxy.OnSendSearchMessage(message); 7646debc2cSopenharmony_ci } 7746debc2cSopenharmony_ci 7846debc2cSopenharmony_ci} 7946debc2cSopenharmony_ci} 8046debc2cSopenharmony_ci 8146debc2cSopenharmony_ci/* Fuzzer entry point */ 8246debc2cSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 8346debc2cSopenharmony_ci{ 8446debc2cSopenharmony_ci if (data == nullptr) { 8546debc2cSopenharmony_ci return 0; 8646debc2cSopenharmony_ci } 8746debc2cSopenharmony_ci 8846debc2cSopenharmony_ci if (size < OHOS::Scan::U32_AT_SIZE || size > OHOS::Scan::FOO_MAX_LEN) { 8946debc2cSopenharmony_ci return 0; 9046debc2cSopenharmony_ci } 9146debc2cSopenharmony_ci FuzzedDataProvider dataProvider(data, size); 9246debc2cSopenharmony_ci OHOS::Scan::TestTcpOnCallback(data, size, &dataProvider); 9346debc2cSopenharmony_ci OHOS::Scan::TestUsbOnCallback(data, size, &dataProvider); 9446debc2cSopenharmony_ci OHOS::Scan::TestOnCallbackSync(data, size, &dataProvider); 9546debc2cSopenharmony_ci OHOS::Scan::TestOnGetFrameResCallback(data, size, &dataProvider); 9646debc2cSopenharmony_ci OHOS::Scan::TestOnScanInitCallback(data, size, &dataProvider); 9746debc2cSopenharmony_ci OHOS::Scan::TestOnSendSearchMessage(data, size, &dataProvider); 9846debc2cSopenharmony_ci return 0; 9946debc2cSopenharmony_ci} 10046debc2cSopenharmony_ci 101