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 private public 1746debc2cSopenharmony_ci#define protected public 1846debc2cSopenharmony_ci#include "fuzzer/FuzzedDataProvider.h" 1946debc2cSopenharmony_ci#include "scanserviceability_fuzzer.h" 2046debc2cSopenharmony_ci#include "scan_service_ability.h" 2146debc2cSopenharmony_ci#include "scan_callback_proxy.h" 2246debc2cSopenharmony_ci#include "scan_service_ability_mock.h" 2346debc2cSopenharmony_ci 2446debc2cSopenharmony_cinamespace OHOS { 2546debc2cSopenharmony_cinamespace Scan { 2646debc2cSopenharmony_ci constexpr size_t FOO_MAX_LEN = 1024; 2746debc2cSopenharmony_ci constexpr size_t U32_AT_SIZE = 4; 2846debc2cSopenharmony_ci#ifdef SANE_ENABLE 2946debc2cSopenharmony_ci constexpr uint8_t MAX_STRING_LENGTH = 255; 3046debc2cSopenharmony_ci constexpr int MAX_SET_NUMBER = 100; 3146debc2cSopenharmony_ci 3246debc2cSopenharmony_ci void TestInitScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 3346debc2cSopenharmony_ci { 3446debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 3546debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 3646debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->ExitScan(); 3746debc2cSopenharmony_ci } 3846debc2cSopenharmony_ci 3946debc2cSopenharmony_ci void TestGetScannerList(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4046debc2cSopenharmony_ci { 4146debc2cSopenharmony_ci OHOS::Scan::ScanServiceAbilityMock::MockPermission(); 4246debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 4346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 4446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetScannerList(); 4546debc2cSopenharmony_ci } 4646debc2cSopenharmony_ci 4746debc2cSopenharmony_ci void TestStopDiscover(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 4846debc2cSopenharmony_ci { 4946debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 5046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 5146debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->StopDiscover(); 5246debc2cSopenharmony_ci } 5346debc2cSopenharmony_ci 5446debc2cSopenharmony_ci void TestOpenScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 5546debc2cSopenharmony_ci { 5646debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 5746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 5846debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 5946debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->OpenScanner(scannerId); 6046debc2cSopenharmony_ci } 6146debc2cSopenharmony_ci 6246debc2cSopenharmony_ci void TestCloseScanner(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 ScanServiceAbility::GetInstance()->InitScan(scanVersion); 6646debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 6746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->OpenScanner(scannerId); 6846debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->CloseScanner(scannerId); 6946debc2cSopenharmony_ci } 7046debc2cSopenharmony_ci 7146debc2cSopenharmony_ci void TestGetScanOptionDesc(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 7246debc2cSopenharmony_ci { 7346debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 7446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 7546debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 7646debc2cSopenharmony_ci int32_t optionIndex = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 7746debc2cSopenharmony_ci ScanOptionDescriptor desc; 7846debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetScanOptionDesc(scannerId, optionIndex, desc); 7946debc2cSopenharmony_ci } 8046debc2cSopenharmony_ci 8146debc2cSopenharmony_ci void TestStartScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 8246debc2cSopenharmony_ci { 8346debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 8446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 8546debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 8646debc2cSopenharmony_ci bool batchMode = dataProvider->ConsumeBool(); 8746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->StartScan(scannerId, batchMode); 8846debc2cSopenharmony_ci } 8946debc2cSopenharmony_ci 9046debc2cSopenharmony_ci void TestGetSingleFrameFD(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 9146debc2cSopenharmony_ci { 9246debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 9346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 9446debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 9546debc2cSopenharmony_ci uint32_t frameSize = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 9646debc2cSopenharmony_ci uint32_t fd = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER); 9746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetSingleFrameFD(scannerId, frameSize, fd); 9846debc2cSopenharmony_ci } 9946debc2cSopenharmony_ci 10046debc2cSopenharmony_ci void TestCancelScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 10146debc2cSopenharmony_ci { 10246debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 10346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 10446debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 10546debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->CancelScan(scannerId); 10646debc2cSopenharmony_ci } 10746debc2cSopenharmony_ci 10846debc2cSopenharmony_ci void TestSetScanIOMode(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 10946debc2cSopenharmony_ci { 11046debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 11146debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 11246debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 11346debc2cSopenharmony_ci bool isNonBlocking = dataProvider->ConsumeBool(); 11446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScanIOMode(scannerId, isNonBlocking); 11546debc2cSopenharmony_ci } 11646debc2cSopenharmony_ci 11746debc2cSopenharmony_ci void TestGetScanSelectFd(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 11846debc2cSopenharmony_ci { 11946debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 12046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 12146debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 12246debc2cSopenharmony_ci int32_t fd = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 12346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetScanSelectFd(scannerId, fd); 12446debc2cSopenharmony_ci } 12546debc2cSopenharmony_ci 12646debc2cSopenharmony_ci void TestOn(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 12746debc2cSopenharmony_ci { 12846debc2cSopenharmony_ci std::string taskId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 12946debc2cSopenharmony_ci std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 13046debc2cSopenharmony_ci sptr<IRemoteObject> impl; 13146debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 13246debc2cSopenharmony_ci sptr<IScanCallback> listener = iface_cast<IScanCallback>(impl); 13346debc2cSopenharmony_ci ScanServiceAbility::registeredListeners_[type] = listener; 13446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->On(taskId, type, listener); 13546debc2cSopenharmony_ci ScanServiceAbility::registeredListeners_.clear(); 13646debc2cSopenharmony_ci } 13746debc2cSopenharmony_ci 13846debc2cSopenharmony_ci void TestOff(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 13946debc2cSopenharmony_ci { 14046debc2cSopenharmony_ci std::string taskId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 14146debc2cSopenharmony_ci std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 14246debc2cSopenharmony_ci sptr<IRemoteObject> impl; 14346debc2cSopenharmony_ci ScanCallbackProxy scanCallbackProxy(impl); 14446debc2cSopenharmony_ci sptr<IScanCallback> listener = iface_cast<IScanCallback>(impl); 14546debc2cSopenharmony_ci ScanServiceAbility::registeredListeners_[type] = listener; 14646debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->Off(taskId, type); 14746debc2cSopenharmony_ci } 14846debc2cSopenharmony_ci 14946debc2cSopenharmony_ci void TestGetScannerState(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 15046debc2cSopenharmony_ci { 15146debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 15246debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitScan(scanVersion); 15346debc2cSopenharmony_ci int32_t scannerState = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 15446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetScannerState(scannerState); 15546debc2cSopenharmony_ci } 15646debc2cSopenharmony_ci 15746debc2cSopenharmony_ci void TestSelectScanOptionDesc(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 15846debc2cSopenharmony_ci { 15946debc2cSopenharmony_ci SANE_Option_Descriptor optionDesc; 16046debc2cSopenharmony_ci const SANE_Option_Descriptor *optionDescPtr = &optionDesc; 16146debc2cSopenharmony_ci ScanOptionDescriptor desc; 16246debc2cSopenharmony_ci optionDesc.constraint_type = SANE_CONSTRAINT_RANGE; 16346debc2cSopenharmony_ci SANE_Range range; 16446debc2cSopenharmony_ci range.min = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 16546debc2cSopenharmony_ci range.max = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 16646debc2cSopenharmony_ci range.quant = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 16746debc2cSopenharmony_ci const SANE_Range* rangePtr = ⦥ 16846debc2cSopenharmony_ci optionDesc.constraint.range = rangePtr; 16946debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SelectScanOptionDesc(optionDescPtr, desc); 17046debc2cSopenharmony_ci } 17146debc2cSopenharmony_ci 17246debc2cSopenharmony_ci void TestOnStartScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 17346debc2cSopenharmony_ci { 17446debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 17546debc2cSopenharmony_ci bool batchMode = dataProvider->ConsumeBool(); 17646debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->OnStartScan(scannerId, batchMode); 17746debc2cSopenharmony_ci } 17846debc2cSopenharmony_ci 17946debc2cSopenharmony_ci void TestSendDeviceInfoTCP(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 18046debc2cSopenharmony_ci { 18146debc2cSopenharmony_ci ScanDeviceInfoTCP info; 18246debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 18346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendDeviceInfoTCP(info, event); 18446debc2cSopenharmony_ci } 18546debc2cSopenharmony_ci 18646debc2cSopenharmony_ci void TestSendDeviceInfo(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 18746debc2cSopenharmony_ci { 18846debc2cSopenharmony_ci ScanDeviceInfo info; 18946debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 19046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendDeviceInfo(info, event); 19146debc2cSopenharmony_ci } 19246debc2cSopenharmony_ci 19346debc2cSopenharmony_ci void TestSendDeviceInfoSync(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 19446debc2cSopenharmony_ci { 19546debc2cSopenharmony_ci ScanDeviceInfoSync info; 19646debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 19746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendDeviceInfoSync(info, event); 19846debc2cSopenharmony_ci } 19946debc2cSopenharmony_ci 20046debc2cSopenharmony_ci void TestDisConnectUsbScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 20146debc2cSopenharmony_ci { 20246debc2cSopenharmony_ci std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 20346debc2cSopenharmony_ci std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 20446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->DisConnectUsbScanner(serialNumber, newDeviceId); 20546debc2cSopenharmony_ci } 20646debc2cSopenharmony_ci 20746debc2cSopenharmony_ci void TestUpdateUsbScannerId(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 20846debc2cSopenharmony_ci { 20946debc2cSopenharmony_ci std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 21046debc2cSopenharmony_ci std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 21146debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->UpdateUsbScannerId(serialNumber, newDeviceId); 21246debc2cSopenharmony_ci } 21346debc2cSopenharmony_ci 21446debc2cSopenharmony_ci void TestSendInitEvent(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 21546debc2cSopenharmony_ci { 21646debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 21746debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 21846debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendInitEvent(scanVersion, event); 21946debc2cSopenharmony_ci } 22046debc2cSopenharmony_ci 22146debc2cSopenharmony_ci void TestSendDeviceSearchEnd(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 22246debc2cSopenharmony_ci { 22346debc2cSopenharmony_ci std::string message = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 22446debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 22546debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendDeviceSearchEnd(message, event); 22646debc2cSopenharmony_ci } 22746debc2cSopenharmony_ci 22846debc2cSopenharmony_ci void TestSetScannerSerialNumber(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 22946debc2cSopenharmony_ci { 23046debc2cSopenharmony_ci ScanDeviceInfo tcpInfo; 23146debc2cSopenharmony_ci tcpInfo.deviceId = "pantum6500:tcp 192.168.223.1 9200-M6700DW"; 23246debc2cSopenharmony_ci std::string ip = "192.168.223.1"; 23346debc2cSopenharmony_ci ScanDeviceInfoTCP scanDeviceInfoTCP; 23446debc2cSopenharmony_ci scanDeviceInfoTCP.deviceName = "Pantum 6666 54QWER"; 23546debc2cSopenharmony_ci ScanServiceAbility::scanDeviceInfoTCPMap_[ip] = scanDeviceInfoTCP; 23646debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerSerialNumber(tcpInfo); 23746debc2cSopenharmony_ci 23846debc2cSopenharmony_ci tcpInfo.deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 23946debc2cSopenharmony_ci ip = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 24046debc2cSopenharmony_ci scanDeviceInfoTCP.deviceName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 24146debc2cSopenharmony_ci ScanServiceAbility::scanDeviceInfoTCPMap_[ip] = scanDeviceInfoTCP; 24246debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerSerialNumber(tcpInfo); 24346debc2cSopenharmony_ci 24446debc2cSopenharmony_ci ScanDeviceInfo usbInfo; 24546debc2cSopenharmony_ci usbInfo.deviceId = "pantum6500:libusb:002:003"; 24646debc2cSopenharmony_ci ScanServiceAbility::usbSnMap["2-3"] = "QWERTY"; 24746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo); 24846debc2cSopenharmony_ci 24946debc2cSopenharmony_ci usbInfo.deviceId = "pantum6500:libusb:002:004"; 25046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo); 25146debc2cSopenharmony_ci usbInfo.deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 25246debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo); 25346debc2cSopenharmony_ci } 25446debc2cSopenharmony_ci 25546debc2cSopenharmony_ci void TestReInitScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 25646debc2cSopenharmony_ci { 25746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->ServiceInit(); 25846debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->InitServiceHandler(); 25946debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->OnStart(); 26046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->OnStop(); 26146debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->ManualStart(); 26246debc2cSopenharmony_ci int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 26346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->ReInitScan(scanVersion); 26446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SaneGetScanner(); 26546debc2cSopenharmony_ci } 26646debc2cSopenharmony_ci 26746debc2cSopenharmony_ci void TestCheckPermission(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 26846debc2cSopenharmony_ci { 26946debc2cSopenharmony_ci std::string permissionName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 27046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->CheckPermission(permissionName); 27146debc2cSopenharmony_ci } 27246debc2cSopenharmony_ci 27346debc2cSopenharmony_ci void TestSendGetFrameResEvent(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 27446debc2cSopenharmony_ci { 27546debc2cSopenharmony_ci bool isGetSucc = dataProvider->ConsumeBool(); 27646debc2cSopenharmony_ci int32_t sizeRead = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER); 27746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendGetFrameResEvent(isGetSucc, sizeRead); 27846debc2cSopenharmony_ci } 27946debc2cSopenharmony_ci 28046debc2cSopenharmony_ci void TestSetScanOptionDescriptor(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 28146debc2cSopenharmony_ci { 28246debc2cSopenharmony_ci ScanOptionDescriptor desc; 28346debc2cSopenharmony_ci SANE_Option_Descriptor optionDesc; 28446debc2cSopenharmony_ci optionDesc.name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 28546debc2cSopenharmony_ci optionDesc.title = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 28646debc2cSopenharmony_ci optionDesc.desc = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 28746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScanOptionDescriptor(desc, &optionDesc); 28846debc2cSopenharmony_ci } 28946debc2cSopenharmony_ci 29046debc2cSopenharmony_ci void TestGetScanHandle(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 29146debc2cSopenharmony_ci { 29246debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 29346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetScanHandle(scannerId); 29446debc2cSopenharmony_ci } 29546debc2cSopenharmony_ci 29646debc2cSopenharmony_ci void TestGeneratePictureBatch(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 29746debc2cSopenharmony_ci { 29846debc2cSopenharmony_ci int32_t status = E_SCAN_NONE; 29946debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 30046debc2cSopenharmony_ci std::string file_name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 30146debc2cSopenharmony_ci std::string output_file = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 30246debc2cSopenharmony_ci ScanProgress* scanProPtr = nullptr; 30346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GeneratePictureSingle(scannerId, file_name, output_file, status, scanProPtr); 30446debc2cSopenharmony_ci } 30546debc2cSopenharmony_ci 30646debc2cSopenharmony_ci void TestAddFoundUsbScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 30746debc2cSopenharmony_ci { 30846debc2cSopenharmony_ci ScanDeviceInfo info; 30946debc2cSopenharmony_ci info.serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 31046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->AddFoundUsbScanner(info); 31146debc2cSopenharmony_ci } 31246debc2cSopenharmony_ci 31346debc2cSopenharmony_ci void TestAddFoundTcpScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 31446debc2cSopenharmony_ci { 31546debc2cSopenharmony_ci ScanDeviceInfo info; 31646debc2cSopenharmony_ci info.serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 31746debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->AddFoundTcpScanner(info); 31846debc2cSopenharmony_ci } 31946debc2cSopenharmony_ci 32046debc2cSopenharmony_ci void TestSetScannerInfo(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 32146debc2cSopenharmony_ci { 32246debc2cSopenharmony_ci SANE_Device currentDevice; 32346debc2cSopenharmony_ci const SANE_Device* currentDevicePtr = ¤tDevice; 32446debc2cSopenharmony_ci const SANE_Device** currentDevicePtrPtr = ¤tDevicePtr; 32546debc2cSopenharmony_ci std::string name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 32646debc2cSopenharmony_ci std::string vendor = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 32746debc2cSopenharmony_ci std::string model = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 32846debc2cSopenharmony_ci std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 32946debc2cSopenharmony_ci currentDevice.name = name.c_str(); 33046debc2cSopenharmony_ci currentDevice.vendor = vendor.c_str(); 33146debc2cSopenharmony_ci currentDevice.vendor = model.c_str(); 33246debc2cSopenharmony_ci currentDevice.type = type.c_str(); 33346debc2cSopenharmony_ci ScanDeviceInfo info; 33446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SetScannerInfo(currentDevicePtrPtr, info); 33546debc2cSopenharmony_ci } 33646debc2cSopenharmony_ci 33746debc2cSopenharmony_ci void TestSendDeviceList(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 33846debc2cSopenharmony_ci { 33946debc2cSopenharmony_ci ScanDeviceInfo infoItem; 34046debc2cSopenharmony_ci std::vector<ScanDeviceInfo> info; 34146debc2cSopenharmony_ci info.push_back(infoItem); 34246debc2cSopenharmony_ci std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 34346debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->SendDeviceList(info, event); 34446debc2cSopenharmony_ci } 34546debc2cSopenharmony_ci 34646debc2cSopenharmony_ci void TestAddScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 34746debc2cSopenharmony_ci { 34846debc2cSopenharmony_ci std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 34946debc2cSopenharmony_ci std::string discoverMode = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 35046debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->AddScanner(serialNumber, discoverMode); 35146debc2cSopenharmony_ci } 35246debc2cSopenharmony_ci 35346debc2cSopenharmony_ci void TestUpdateScannerName(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 35446debc2cSopenharmony_ci { 35546debc2cSopenharmony_ci std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 35646debc2cSopenharmony_ci std::string discoverMode = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 35746debc2cSopenharmony_ci std::string deviceName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 35846debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->UpdateScannerName(serialNumber, discoverMode, deviceName); 35946debc2cSopenharmony_ci } 36046debc2cSopenharmony_ci 36146debc2cSopenharmony_ci void TestCleanScanTask(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 36246debc2cSopenharmony_ci { 36346debc2cSopenharmony_ci std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 36446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->CleanScanTask(scannerId); 36546debc2cSopenharmony_ci } 36646debc2cSopenharmony_ci 36746debc2cSopenharmony_ci void TestGetAddedScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 36846debc2cSopenharmony_ci { 36946debc2cSopenharmony_ci ScanDeviceInfo addedScanner; 37046debc2cSopenharmony_ci std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH); 37146debc2cSopenharmony_ci addedScanner.SetDeviceId(newDeviceId); 37246debc2cSopenharmony_ci std::vector<ScanDeviceInfo> allAddedScanner; 37346debc2cSopenharmony_ci allAddedScanner.push_back(addedScanner); 37446debc2cSopenharmony_ci ScanServiceAbility::GetInstance()->GetAddedScanner(allAddedScanner); 37546debc2cSopenharmony_ci } 37646debc2cSopenharmony_ci 37746debc2cSopenharmony_ci void TestNotPublicFunction(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider) 37846debc2cSopenharmony_ci { 37946debc2cSopenharmony_ci if (dataProvider == nullptr) { 38046debc2cSopenharmony_ci return; 38146debc2cSopenharmony_ci } 38246debc2cSopenharmony_ci OHOS::Scan::TestReInitScan(data, size, dataProvider); 38346debc2cSopenharmony_ci OHOS::Scan::TestCheckPermission(data, size, dataProvider); 38446debc2cSopenharmony_ci OHOS::Scan::TestSendGetFrameResEvent(data, size, dataProvider); 38546debc2cSopenharmony_ci OHOS::Scan::TestSetScanOptionDescriptor(data, size, dataProvider); 38646debc2cSopenharmony_ci OHOS::Scan::TestGetScanHandle(data, size, dataProvider); 38746debc2cSopenharmony_ci OHOS::Scan::TestGeneratePictureBatch(data, size, dataProvider); 38846debc2cSopenharmony_ci OHOS::Scan::TestAddFoundUsbScanner(data, size, dataProvider); 38946debc2cSopenharmony_ci OHOS::Scan::TestAddFoundTcpScanner(data, size, dataProvider); 39046debc2cSopenharmony_ci OHOS::Scan::TestSetScannerInfo(data, size, dataProvider); 39146debc2cSopenharmony_ci OHOS::Scan::TestSendDeviceList(data, size, dataProvider); 39246debc2cSopenharmony_ci OHOS::Scan::TestAddScanner(data, size, dataProvider); 39346debc2cSopenharmony_ci OHOS::Scan::TestUpdateScannerName(data, size, dataProvider); 39446debc2cSopenharmony_ci OHOS::Scan::TestCleanScanTask(data, size, dataProvider); 39546debc2cSopenharmony_ci OHOS::Scan::TestGetAddedScanner(data, size, dataProvider); 39646debc2cSopenharmony_ci } 39746debc2cSopenharmony_ci 39846debc2cSopenharmony_ci#endif 39946debc2cSopenharmony_ci 40046debc2cSopenharmony_ci} 40146debc2cSopenharmony_ci} 40246debc2cSopenharmony_ci 40346debc2cSopenharmony_ci/* Fuzzer entry point */ 40446debc2cSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 40546debc2cSopenharmony_ci{ 40646debc2cSopenharmony_ci if (data == nullptr) { 40746debc2cSopenharmony_ci return 0; 40846debc2cSopenharmony_ci } 40946debc2cSopenharmony_ci 41046debc2cSopenharmony_ci if (size < OHOS::Scan::U32_AT_SIZE || size > OHOS::Scan::FOO_MAX_LEN) { 41146debc2cSopenharmony_ci return 0; 41246debc2cSopenharmony_ci } 41346debc2cSopenharmony_ci#ifdef SANE_ENABLE 41446debc2cSopenharmony_ci FuzzedDataProvider dataProvider(data, size); 41546debc2cSopenharmony_ci OHOS::Scan::ScanServiceAbilityMock::MockPermission(); 41646debc2cSopenharmony_ci OHOS::Scan::TestInitScan(data, size, &dataProvider); 41746debc2cSopenharmony_ci OHOS::Scan::TestGetScannerList(data, size, &dataProvider); 41846debc2cSopenharmony_ci OHOS::Scan::TestStopDiscover(data, size, &dataProvider); 41946debc2cSopenharmony_ci OHOS::Scan::TestOpenScanner(data, size, &dataProvider); 42046debc2cSopenharmony_ci OHOS::Scan::TestCloseScanner(data, size, &dataProvider); 42146debc2cSopenharmony_ci OHOS::Scan::TestGetScanOptionDesc(data, size, &dataProvider); 42246debc2cSopenharmony_ci OHOS::Scan::TestStartScan(data, size, &dataProvider); 42346debc2cSopenharmony_ci OHOS::Scan::TestGetSingleFrameFD(data, size, &dataProvider); 42446debc2cSopenharmony_ci OHOS::Scan::TestCancelScan(data, size, &dataProvider); 42546debc2cSopenharmony_ci OHOS::Scan::TestSetScanIOMode(data, size, &dataProvider); 42646debc2cSopenharmony_ci OHOS::Scan::TestGetScanSelectFd(data, size, &dataProvider); 42746debc2cSopenharmony_ci OHOS::Scan::TestOn(data, size, &dataProvider); 42846debc2cSopenharmony_ci OHOS::Scan::TestOff(data, size, &dataProvider); 42946debc2cSopenharmony_ci OHOS::Scan::TestGetScannerState(data, size, &dataProvider); 43046debc2cSopenharmony_ci OHOS::Scan::TestSelectScanOptionDesc(data, size, &dataProvider); 43146debc2cSopenharmony_ci OHOS::Scan::TestOnStartScan(data, size, &dataProvider); 43246debc2cSopenharmony_ci OHOS::Scan::TestSendDeviceInfoTCP(data, size, &dataProvider); 43346debc2cSopenharmony_ci OHOS::Scan::TestSendDeviceInfo(data, size, &dataProvider); 43446debc2cSopenharmony_ci OHOS::Scan::TestSendDeviceInfoSync(data, size, &dataProvider); 43546debc2cSopenharmony_ci OHOS::Scan::TestDisConnectUsbScanner(data, size, &dataProvider); 43646debc2cSopenharmony_ci OHOS::Scan::TestUpdateUsbScannerId(data, size, &dataProvider); 43746debc2cSopenharmony_ci OHOS::Scan::TestSendInitEvent(data, size, &dataProvider); 43846debc2cSopenharmony_ci OHOS::Scan::TestSendDeviceSearchEnd(data, size, &dataProvider); 43946debc2cSopenharmony_ci OHOS::Scan::TestSetScannerSerialNumber(data, size, &dataProvider); 44046debc2cSopenharmony_ci OHOS::Scan::TestNotPublicFunction(data, size, &dataProvider); 44146debc2cSopenharmony_ci#endif 44246debc2cSopenharmony_ci return 0; 44346debc2cSopenharmony_ci}