Signed-off-by: liuxiaowei42 <liuxiaowei42@huawei.com>
This commit is contained in:
liuxiaowei42
2025-06-26 16:17:17 +08:00
parent fe923afb62
commit 9f911dc894
4 changed files with 137 additions and 3 deletions
@@ -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
@@ -42,6 +42,39 @@ void InitSinkFuzzTest(const uint8_t *data, size_t size)
const uint32_t sleepTimeUs = 50 * 1000;
usleep(sleepTimeUs);
}
void OnLoadSystemAbilitySuccessFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
int32_t saId = *(reinterpret_cast<const int32_t*>(data));
DistributedInput::DistributedInputSinkHandler::SALoadSinkCb saLoadSinkCb;
saLoadSinkCb.OnLoadSystemAbilitySuccess(saId, nullptr);
}
void OnLoadSystemAbilityFailFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
int32_t saId = *(reinterpret_cast<const int32_t*>(data));
DistributedInput::DistributedInputSinkHandler::SALoadSinkCb saLoadSinkCb;
saLoadSinkCb.OnLoadSystemAbilityFail(saId);
}
void OnRemoteSinkSvrDiedFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size == 0)) {
return;
}
std::string networkId(reinterpret_cast<const char*>(data), size);
DistributedInput::DistributedInputSinkHandler::GetInstance().OnRemoteSinkSvrDied(nullptr);
DistributedInput::DistributedInputSinkHandler::GetInstance().RegisterPrivacyResources(nullptr);
DistributedInput::DistributedInputSinkHandler::GetInstance().PauseDistributedHardware(networkId);
DistributedInput::DistributedInputSinkHandler::GetInstance().ResumeDistributedHardware(networkId);
DistributedInput::DistributedInputSinkHandler::GetInstance().StopDistributedHardware(networkId);
}
} // namespace DistributedHardware
} // namespace OHOS
@@ -50,5 +83,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
/* Run your code on data */
OHOS::DistributedHardware::InitSinkFuzzTest(data, size);
OHOS::DistributedHardware::OnLoadSystemAbilitySuccessFuzzTest(data, size);
OHOS::DistributedHardware::OnLoadSystemAbilityFailFuzzTest(data, size);
OHOS::DistributedHardware::OnRemoteSinkSvrDiedFuzzTest(data, size);
return 0;
}
@@ -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
@@ -39,6 +39,37 @@ void InitSourceFuzzTest(const uint8_t *data, size_t size)
std::string params(reinterpret_cast<const char*>(data), size);
DistributedInput::DistributedInputSourceHandler::GetInstance().InitSource(params);
}
void OnLoadSystemAbilitySuccessFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
int32_t saId = *(reinterpret_cast<const int32_t*>(data));
DistributedInput::DistributedInputSourceHandler::SALoadSourceCb saLoadSourceCb;
saLoadSourceCb.OnLoadSystemAbilitySuccess(saId, nullptr);
}
void OnLoadSystemAbilityFailFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
int32_t saId = *(reinterpret_cast<const int32_t*>(data));
DistributedInput::DistributedInputSourceHandler::SALoadSourceCb saLoadSourceCb;
saLoadSourceCb.OnLoadSystemAbilityFail(saId);
}
void OnRemoteSourceSvrDiedFuzzTest(const uint8_t *data, size_t size)
{
(void)data;
(void)size;
DistributedInput::DistributedInputSourceHandler::GetInstance().OnRemoteSourceSvrDied(nullptr);
DistributedInput::DistributedInputSourceHandler::GetInstance().RegisterDistributedHardwareStateListener(nullptr);
DistributedInput::DistributedInputSourceHandler::GetInstance().UnregisterDistributedHardwareStateListener();
DistributedInput::DistributedInputSourceHandler::GetInstance().RegisterDataSyncTriggerListener(nullptr);
DistributedInput::DistributedInputSourceHandler::GetInstance().UnregisterDataSyncTriggerListener();
}
} // namespace DistributedHardware
} // namespace OHOS
@@ -47,5 +78,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
/* Run your code on data */
OHOS::DistributedHardware::InitSourceFuzzTest(data, size);
OHOS::DistributedHardware::OnLoadSystemAbilitySuccessFuzzTest(data, size);
OHOS::DistributedHardware::OnLoadSystemAbilityFailFuzzTest(data, size);
OHOS::DistributedHardware::OnRemoteSourceSvrDiedFuzzTest(data, size);
return 0;
}
@@ -79,6 +79,7 @@ ohos_fuzztest("DistributedInputTransportBaseFuzzTest") {
"HI_LOG_ENABLE",
"DH_LOG_TAG=\"DistributedInputTransportBaseFuzzTest\"",
"LOG_DOMAIN=0xD004120",
"private=public",
]
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2024 Huawei Device Co., Ltd.
* Copyright (c) 2022-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
@@ -18,6 +18,7 @@
#include <cstddef>
#include <cstdint>
#include <functional>
#include <fuzzer/FuzzedDataProvider.h>
#include <iostream>
#include <thread>
#include <unistd.h>
@@ -54,6 +55,63 @@ void OnBytesReceivedFuzzTest(const uint8_t *data, size_t size)
uint32_t dataLen = static_cast<const uint32_t>(size);
DistributedInput::DistributedInputTransportBase::GetInstance().OnBytesReceived(sessionId, msg, dataLen);
}
void GetSessionIdByDevIdFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size == 0)) {
return;
}
std::string srcId(reinterpret_cast<const char*>(data), size);
DistributedInput::DistributedInputTransportBase::GetInstance().GetSessionIdByDevId(srcId);
}
void HandleSessionFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
int32_t sessionId = *(reinterpret_cast<const int32_t*>(data));
std::string message(reinterpret_cast<const char*>(data), size);
DistributedInput::DistributedInputTransportBase::GetInstance().HandleSession(sessionId, message);
}
void OnSessionClosedFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size < sizeof(int32_t))) {
return;
}
FuzzedDataProvider fdp(data, size);
int32_t sessionId = fdp.ConsumeIntegral<int32_t>();
int32_t reasonValue = fdp.ConsumeIntegral<int32_t>();
ShutdownReason reason = static_cast<ShutdownReason>(reasonValue);
DistributedInput::DistributedInputTransportBase::GetInstance().RegisterSinkHandleSessionCallback(nullptr);
DistributedInput::DistributedInputTransportBase::GetInstance().RegisterSrcHandleSessionCallback(nullptr);
DistributedInput::DistributedInputTransportBase::GetInstance().RegisterSourceManagerCallback(nullptr);
DistributedInput::DistributedInputTransportBase::GetInstance().OnSessionClosed(sessionId, reason);
}
void EraseSessionIdFuzzTest(const uint8_t *data, size_t size)
{
if ((data == nullptr) || (size == 0)) {
return;
}
std::string remoteDevId(reinterpret_cast<const char*>(data), size);
sptr<DistributedInput::ISessionStateCallback> callback = nullptr;
DistributedInput::DistributedInputTransportBase::GetInstance().RegisterSessionStateCb(callback);
DistributedInput::DistributedInputTransportBase::GetInstance().UnregisterSessionStateCb();
DistributedInput::DistributedInputTransportBase::GetInstance().GetCurrentSessionId();
DistributedInput::DistributedInputTransportBase::GetInstance().StopAllSession();
DistributedInput::DistributedInputTransportBase::GetInstance().EraseSessionId(remoteDevId);
}
void InitFuzzTest(const uint8_t *data, size_t size)
{
(void)data;
(void)size;
DistributedInput::DistributedInputTransportBase::GetInstance().Init();
DistributedInput::DistributedInputTransportBase::GetInstance().CreateServerSocket();
}
} // namespace DistributedHardware
} // namespace OHOS
@@ -63,5 +121,10 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
/* Run your code on data */
OHOS::DistributedHardware::StartSessionFuzzTest(data, size);
OHOS::DistributedHardware::OnBytesReceivedFuzzTest(data, size);
OHOS::DistributedHardware::GetSessionIdByDevIdFuzzTest(data, size);
OHOS::DistributedHardware::HandleSessionFuzzTest(data, size);
OHOS::DistributedHardware::OnSessionClosedFuzzTest(data, size);
OHOS::DistributedHardware::EraseSessionIdFuzzTest(data, size);
OHOS::DistributedHardware::InitFuzzTest(data, size);
return 0;
}