From 0ffab89756bcec0282a77083c24fd938e2ebdee0 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Wed, 8 Jan 2025 15:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85FUZZ,=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- .../accessmanageroffline_fuzzer/BUILD.gn | 3 +- .../accessmanageroffline_fuzzer.cpp | 26 +++- .../capabilityinfomanager_fuzzer/BUILD.gn | 4 +- .../capabilityinfomanager_fuzzer.cpp | 140 +++++++++++++++++- 4 files changed, 169 insertions(+), 4 deletions(-) diff --git a/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/BUILD.gn b/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/BUILD.gn index 1454d4ca..189c8f81 100644 --- a/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/BUILD.gn +++ b/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 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 @@ -28,6 +28,7 @@ ohos_fuzztest("AccessManagerOfflineFuzzTest") { "${common_path}/log/include", "${services_path}/distributedhardwarefwkservice/include", "${services_path}/distributedhardwarefwkservice/include/accessmanager", + "${services_path}/distributedhardwarefwkservice/include/utils", ] cflags = [ "-g", diff --git a/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/accessmanageroffline_fuzzer.cpp b/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/accessmanageroffline_fuzzer.cpp index f110b839..999d412d 100644 --- a/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/accessmanageroffline_fuzzer.cpp +++ b/services/distributedhardwarefwkservice/test/fuzztest/accessmanageroffline_fuzzer/accessmanageroffline_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 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 @@ -26,6 +26,7 @@ #include "access_manager.h" #include "distributed_hardware_errno.h" #include "distributed_hardware_manager_factory.h" +#include "dh_context.h" namespace OHOS { namespace DistributedHardware { @@ -49,6 +50,28 @@ void AccessManagerOfflineFuzzTest(const uint8_t* data, size_t size) usleep(SLEEP_TIME_US); } + +void AccessManagerOfflineSecondFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0) || (size > DM_MAX_DEVICE_ID_LEN)) { + return; + } + + AccessManager::GetInstance()->Init(); + std::string networkId(reinterpret_cast(data), size); + std::string udId(reinterpret_cast(data), size); + std::string uuId(reinterpret_cast(data), size); + DHContext::GetInstance().AddOnlineDevice(udId, uuId, networkId); + DmDeviceInfo deviceInfo; + int32_t ret = memcpy_s(deviceInfo.networkId, DM_MAX_DEVICE_ID_LEN, networkId.c_str(), size); + if (ret != EOK) { + return; + } + + AccessManager::GetInstance()->OnDeviceOffline(deviceInfo); + DHContext::GetInstance().RemoveOnlineDeviceIdEntryByNetworkId(networkId); + usleep(SLEEP_TIME_US); +} } } @@ -57,6 +80,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { /* Run your code on data */ OHOS::DistributedHardware::AccessManagerOfflineFuzzTest(data, size); + OHOS::DistributedHardware::AccessManagerOfflineSecondFuzzTest(data, size); return 0; } diff --git a/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/BUILD.gn b/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/BUILD.gn index b4bc0d78..7292c57d 100644 --- a/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/BUILD.gn +++ b/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 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 @@ -28,6 +28,7 @@ ohos_fuzztest("CapabilityInfoManagerFuzzTest") { "${common_path}/log/include", "${common_path}/utils/include", "${services_path}/distributedhardwarefwkservice/include/resourcemanager", + "${services_path}/distributedhardwarefwkservice/include/utils", ] cflags = [ "-g", @@ -39,6 +40,7 @@ ohos_fuzztest("CapabilityInfoManagerFuzzTest") { deps = [ "${services_path}/distributedhardwarefwkservice:distributedhardwarefwksvr", + "${utils_path}:distributedhardwareutils", ] defines = [ diff --git a/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp b/services/distributedhardwarefwkservice/test/fuzztest/capabilityinfomanager_fuzzer/capabilityinfomanager_fuzzer.cpp index 2e3c94d1..79d7edbc 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-2024 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 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,10 +15,13 @@ #include "capabilityinfomanager_fuzzer.h" +#include "constants.h" #include "capability_info.h" #include "capability_utils.h" #include "capability_info_manager.h" #include "distributed_hardware_log.h" +#include "dh_context.h" +#include "dh_utils_tool.h" namespace OHOS { namespace DistributedHardware { @@ -163,6 +166,138 @@ void GetDataByKeyFuzzTest(const uint8_t* data, size_t size) CapabilityInfoManager::GetInstance()->GetDataByKey(key, capInfoPtr); CapabilityInfoManager::GetInstance()->UnInit(); } + +void CapabilityInfoManagerOnChangeInsertFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + cJSON *insertJson = cJSON_CreateObject(); + if (insertJson == nullptr) { + return; + } + std::string networkId(reinterpret_cast(data), size); + std::string udId(reinterpret_cast(data), size); + std::string uuId(reinterpret_cast(data), size); + DHContext::GetInstance().AddOnlineDevice(udId, uuId, networkId); + std::string deviceId = Sha256(uuId); + cJSON_AddStringToObject(insertJson, DH_ID.c_str(), "111111"); + cJSON_AddStringToObject(insertJson, DEV_ID.c_str(), deviceId.c_str()); + cJSON_AddStringToObject(insertJson, DEV_NAME.c_str(), "dev_name"); + char* cjson = cJSON_PrintUnformatted(insertJson); + if (cjson == nullptr) { + cJSON_Delete(insertJson); + return; + } + std::string jsonStr(cjson); + DistributedKv::Entry insert; + insert.key = std::string(reinterpret_cast(data), size); + insert.value = jsonStr; + + DistributedKv::Entry update; + DistributedKv::Entry del; + std::vector inserts; + std::vector updates; + std::vector deleteds; + inserts.push_back(insert); + updates.push_back(update); + deleteds.push_back(del); + + DistributedKv::ChangeNotification changeIn(std::move(inserts), std::move(updates), std::move(deleteds), + deviceId, true); + CapabilityInfoManager::GetInstance()->OnChange(changeIn); + DHContext::GetInstance().RemoveOnlineDeviceIdEntryByNetworkId(networkId); + cJSON_free(cjson); + cJSON_Delete(insertJson); +} + +void CapabilityInfoManagerOnChangeUpdateFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + cJSON *updateJson = cJSON_CreateObject(); + if (updateJson == nullptr) { + return; + } + std::string networkId(reinterpret_cast(data), size); + std::string udId(reinterpret_cast(data), size); + std::string uuId(reinterpret_cast(data), size); + DHContext::GetInstance().AddOnlineDevice(udId, uuId, networkId); + std::string deviceId = Sha256(uuId); + cJSON_AddStringToObject(updateJson, DH_ID.c_str(), "222222"); + cJSON_AddStringToObject(updateJson, DEV_ID.c_str(), deviceId.c_str()); + cJSON_AddStringToObject(updateJson, DEV_NAME.c_str(), "dev_name"); + char* cjson = cJSON_PrintUnformatted(updateJson); + if (cjson == nullptr) { + cJSON_Delete(updateJson); + return; + } + std::string jsonStr(cjson); + DistributedKv::Entry update; + update.key = std::string(reinterpret_cast(data), size); + update.value = jsonStr; + + DistributedKv::Entry insert; + DistributedKv::Entry del; + std::vector inserts; + std::vector updates; + std::vector deleteds; + inserts.push_back(insert); + updates.push_back(update); + deleteds.push_back(del); + + DistributedKv::ChangeNotification changeIn(std::move(inserts), std::move(updates), std::move(deleteds), + deviceId, true); + CapabilityInfoManager::GetInstance()->OnChange(changeIn); + DHContext::GetInstance().RemoveOnlineDeviceIdEntryByNetworkId(networkId); + cJSON_free(cjson); + cJSON_Delete(updateJson); +} + +void CapabilityInfoManagerOnChangeDeleteFuzzTest(const uint8_t* data, size_t size) +{ + if ((data == nullptr) || (size == 0)) { + return; + } + cJSON *deleteJson = cJSON_CreateObject(); + if (deleteJson == nullptr) { + return; + } + std::string networkId(reinterpret_cast(data), size); + std::string udId(reinterpret_cast(data), size); + std::string uuId(reinterpret_cast(data), size); + DHContext::GetInstance().AddOnlineDevice(udId, uuId, networkId); + std::string deviceId = Sha256(uuId); + cJSON_AddStringToObject(deleteJson, DH_ID.c_str(), "333333"); + cJSON_AddStringToObject(deleteJson, DEV_ID.c_str(), deviceId.c_str()); + cJSON_AddStringToObject(deleteJson, DEV_NAME.c_str(), "dev_name"); + char* cjson = cJSON_PrintUnformatted(deleteJson); + if (cjson == nullptr) { + cJSON_Delete(deleteJson); + return; + } + std::string jsonStr(cjson); + DistributedKv::Entry del; + del.key = std::string(reinterpret_cast(data), size); + del.value = jsonStr; + + DistributedKv::Entry insert; + DistributedKv::Entry update; + std::vector inserts; + std::vector updates; + std::vector deleteds; + inserts.push_back(insert); + updates.push_back(update); + deleteds.push_back(del); + + DistributedKv::ChangeNotification changeIn(std::move(inserts), std::move(updates), std::move(deleteds), + deviceId, true); + CapabilityInfoManager::GetInstance()->OnChange(changeIn); + DHContext::GetInstance().RemoveOnlineDeviceIdEntryByNetworkId(networkId); + cJSON_free(cjson); + cJSON_Delete(deleteJson); +} } } @@ -178,6 +313,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) OHOS::DistributedHardware::AddCapabilityInMemFuzzTest(data, size); OHOS::DistributedHardware::IsCapabilityMatchFilterFuzzTest(data, size); OHOS::DistributedHardware::GetDataByKeyFuzzTest(data, size); + OHOS::DistributedHardware::CapabilityInfoManagerOnChangeInsertFuzzTest(data, size); + OHOS::DistributedHardware::CapabilityInfoManagerOnChangeUpdateFuzzTest(data, size); + OHOS::DistributedHardware::CapabilityInfoManagerOnChangeDeleteFuzzTest(data, size); return 0; } -- Gitee