From 7559edec89fb2320128575648ceaa2a73f4ca784 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Mon, 2 Sep 2024 15:49:24 +0800 Subject: [PATCH] add fuzz Signed-off-by: li-tiangang4 --- .../capabilityinfomanager_fuzzer.cpp | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp b/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp index 942db289..2e3c94d1 100644 --- a/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp +++ b/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -15,11 +15,16 @@ #include "capabilityinfomanager_fuzzer.h" +#include "capability_info.h" +#include "capability_utils.h" #include "capability_info_manager.h" #include "distributed_hardware_log.h" namespace OHOS { namespace DistributedHardware { +namespace { + constexpr uint16_t TEST_DEV_TYPE_PAD = 0x11; +} void CapabilityInfoManagerFuzzTest(const uint8_t* data, size_t size) { @@ -64,7 +69,9 @@ void RemoveCapabilityInfoByKeyFuzzTest(const uint8_t* data, size_t size) return; } std::string key(reinterpret_cast(data), size); + CapabilityInfoManager::GetInstance()->Init(); CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(key); + CapabilityInfoManager::GetInstance()->UnInit(); } void RemoveCapabilityInfoInDBFuzzTest(const uint8_t* data, size_t size) @@ -73,7 +80,9 @@ void RemoveCapabilityInfoInDBFuzzTest(const uint8_t* data, size_t size) return; } std::string deviceId(reinterpret_cast(data), size); + CapabilityInfoManager::GetInstance()->Init(); CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoInDB(deviceId); + CapabilityInfoManager::GetInstance()->UnInit(); } void SyncDeviceInfoFromDBFuzzTest(const uint8_t* data, size_t size) @@ -87,6 +96,73 @@ void SyncDeviceInfoFromDBFuzzTest(const uint8_t* data, size_t size) CapabilityInfoManager::GetInstance()->SyncRemoteCapabilityInfos(); CapabilityInfoManager::GetInstance()->UnInit(); } + +void AddCapabilityInMemFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + std::vector> resInfos; + CapabilityInfoManager::GetInstance()->AddCapabilityInMem(resInfos); + + std::string dhId1(reinterpret_cast(data), size); + std::string deviceId1(reinterpret_cast(data), size); + std::string deviceName1(reinterpret_cast(data), size); + std::string dhAttrs1(reinterpret_cast(data), size); + std::string dhSubtype1(reinterpret_cast(data), size); + std::shared_ptr capInfo1 = std::make_shared( + dhId1, deviceId1, deviceName1, TEST_DEV_TYPE_PAD, DHType::AUDIO, dhAttrs1, dhSubtype1); + + std::string dhId2(reinterpret_cast(data), size); + std::string deviceId2(reinterpret_cast(data), size); + std::string deviceName2(reinterpret_cast(data), size); + std::string dhAttrs2(reinterpret_cast(data), size); + std::string dhSubtype2(reinterpret_cast(data), size); + std::shared_ptr capInfo2 = std::make_shared( + dhId2, deviceId2, deviceName2, TEST_DEV_TYPE_PAD, DHType::CAMERA, dhAttrs2, dhSubtype2); + std::vector> resInfos1 { capInfo1, capInfo2 }; + CapabilityInfoManager::GetInstance()->AddCapabilityInMem(resInfos1); +} + +void IsCapabilityMatchFilterFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + std::shared_ptr cap = nullptr; + CapabilityInfoFilter filter = CapabilityInfoFilter::FILTER_DH_ID; + std::string value(reinterpret_cast(data), size); + CapabilityInfoManager::GetInstance()->IsCapabilityMatchFilter(cap, filter, value); + + std::string dhId(reinterpret_cast(data), size); + std::string deviceId(reinterpret_cast(data), size); + std::string deviceName(reinterpret_cast(data), size); + std::string dhAttrs(reinterpret_cast(data), size); + std::string dhSubtype(reinterpret_cast(data), size); + std::shared_ptr capInfo = std::make_shared( + dhId, deviceId, deviceName, TEST_DEV_TYPE_PAD, DHType::AUDIO, dhAttrs, dhSubtype); + CapabilityInfoManager::GetInstance()->IsCapabilityMatchFilter(capInfo, filter, value); + filter = CapabilityInfoFilter::FILTER_DEVICE_ID; + CapabilityInfoManager::GetInstance()->IsCapabilityMatchFilter(capInfo, filter, value); + filter = CapabilityInfoFilter::FILTER_DEVICE_NAME; + CapabilityInfoManager::GetInstance()->IsCapabilityMatchFilter(capInfo, filter, value); + filter = CapabilityInfoFilter::FILTER_DH_ATTRS; + CapabilityInfoManager::GetInstance()->IsCapabilityMatchFilter(capInfo, filter, value); +} + +void GetDataByKeyFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + std::string key(reinterpret_cast(data), size); + std::shared_ptr capInfoPtr; + CapabilityInfoManager::GetInstance()->GetDataByKey(key, capInfoPtr); + + CapabilityInfoManager::GetInstance()->Init(); + CapabilityInfoManager::GetInstance()->GetDataByKey(key, capInfoPtr); + CapabilityInfoManager::GetInstance()->UnInit(); +} } } @@ -99,6 +175,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) OHOS::DistributedHardware::RemoveCapabilityInfoByKeyFuzzTest(data, size); OHOS::DistributedHardware::RemoveCapabilityInfoInDBFuzzTest(data, size); OHOS::DistributedHardware::SyncDeviceInfoFromDBFuzzTest(data, size); + OHOS::DistributedHardware::AddCapabilityInMemFuzzTest(data, size); + OHOS::DistributedHardware::IsCapabilityMatchFilterFuzzTest(data, size); + OHOS::DistributedHardware::GetDataByKeyFuzzTest(data, size); return 0; } -- Gitee