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#include <functional> 1746debc2cSopenharmony_ci#include "fuzzer/FuzzedDataProvider.h" 1846debc2cSopenharmony_ci#include "ohscan.h" 1946debc2cSopenharmony_ci#include "scancapi_fuzzer.h" 2046debc2cSopenharmony_ci 2146debc2cSopenharmony_cinamespace OHOS { 2246debc2cSopenharmony_cinamespace Scan { 2346debc2cSopenharmony_ciconstexpr uint8_t MAX_STRING_LENGTH = 255; 2446debc2cSopenharmony_ciconstexpr int MAX_SET_NUMBER = 100; 2546debc2cSopenharmony_ciconstexpr size_t FOO_MAX_LEN = 1024; 2646debc2cSopenharmony_ciconstexpr size_t U32_AT_SIZE = 4; 2746debc2cSopenharmony_ci 2846debc2cSopenharmony_civoid DiscoveryCallBack(Scan_ScannerDevice** devices, int32_t deviceCount) {} 2946debc2cSopenharmony_ci 3046debc2cSopenharmony_civoid OHScanOpenScannerFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 3146debc2cSopenharmony_ci{ 3246debc2cSopenharmony_ci OH_Scan_Init(); 3346debc2cSopenharmony_ci OH_Scan_StartScannerDiscovery(DiscoveryCallBack); 3446debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 3546debc2cSopenharmony_ci OH_Scan_OpenScanner(scannerId.c_str()); 3646debc2cSopenharmony_ci OH_Scan_CloseScanner(scannerId.c_str()); 3746debc2cSopenharmony_ci OH_Scan_Exit(); 3846debc2cSopenharmony_ci} 3946debc2cSopenharmony_ci 4046debc2cSopenharmony_civoid OHScanGetScannerParameterFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4146debc2cSopenharmony_ci{ 4246debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 4346debc2cSopenharmony_ci int32_t errorCode = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 4446debc2cSopenharmony_ci OH_Scan_GetScannerParameter(scannerId.c_str(), &errorCode); 4546debc2cSopenharmony_ci} 4646debc2cSopenharmony_ci 4746debc2cSopenharmony_civoid OHScanSetScannerParameterFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4846debc2cSopenharmony_ci{ 4946debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 5046debc2cSopenharmony_ci int32_t option = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 5146debc2cSopenharmony_ci std::string value = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 5246debc2cSopenharmony_ci OH_Scan_SetScannerParameter(scannerId.c_str(), option, value.c_str()); 5346debc2cSopenharmony_ci} 5446debc2cSopenharmony_ci 5546debc2cSopenharmony_civoid OHScanStartScanFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 5646debc2cSopenharmony_ci{ 5746debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 5846debc2cSopenharmony_ci bool batchMode = dataProvider->ConsumeBool(); 5946debc2cSopenharmony_ci OH_Scan_StartScan(scannerId.c_str(), batchMode); 6046debc2cSopenharmony_ci} 6146debc2cSopenharmony_ci 6246debc2cSopenharmony_civoid OHScanCancelScanFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 6346debc2cSopenharmony_ci{ 6446debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 6546debc2cSopenharmony_ci OH_Scan_CancelScan(scannerId.c_str()); 6646debc2cSopenharmony_ci} 6746debc2cSopenharmony_ci 6846debc2cSopenharmony_civoid OHScanGetScanPictureProgressFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 6946debc2cSopenharmony_ci{ 7046debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 7146debc2cSopenharmony_ci Scan_PictureScanProgress progress; 7246debc2cSopenharmony_ci progress.progress = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 7346debc2cSopenharmony_ci progress.fd = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 7446debc2cSopenharmony_ci progress.isFinal = dataProvider->ConsumeBool(); 7546debc2cSopenharmony_ci OH_Scan_GetPictureScanProgress(scannerId.c_str(), &progress); 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::OHScanOpenScannerFuzzTest(data, size, &dataProvider); 9346debc2cSopenharmony_ci OHOS::Scan::OHScanGetScannerParameterFuzzTest(data, size, &dataProvider); 9446debc2cSopenharmony_ci OHOS::Scan::OHScanSetScannerParameterFuzzTest(data, size, &dataProvider); 9546debc2cSopenharmony_ci OHOS::Scan::OHScanStartScanFuzzTest(data, size, &dataProvider); 9646debc2cSopenharmony_ci OHOS::Scan::OHScanCancelScanFuzzTest(data, size, &dataProvider); 9746debc2cSopenharmony_ci OHOS::Scan::OHScanGetScanPictureProgressFuzzTest(data, size, &dataProvider); 9846debc2cSopenharmony_ci return 0; 9946debc2cSopenharmony_ci} 10046debc2cSopenharmony_ci 101