From 9dfd58cec8da9a58d7f0c4f66ae33bd0c6199e26 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Wed, 7 Aug 2024 11:28:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9cooddy726=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- common/include/dinput_errcode.h | 1 + common/include/input_hub.cpp | 7 +- .../src/distributed_input_sink_manager.cpp | 14 +- .../src/distributed_input_sink_transport.cpp | 4 + .../src/distributed_input_node_manager.cpp | 8 + .../dinput_source_manager_event_handler.cpp | 144 ++++++++++++++++++ ...tributed_input_source_transport_fuzzer.cpp | 4 +- ...istributed_input_transport_base_fuzzer.cpp | 4 +- 8 files changed, 176 insertions(+), 10 deletions(-) diff --git a/common/include/dinput_errcode.h b/common/include/dinput_errcode.h index a950bf0..ce0f8d7 100644 --- a/common/include/dinput_errcode.h +++ b/common/include/dinput_errcode.h @@ -68,6 +68,7 @@ namespace DistributedInput { constexpr int32_t ERR_DH_INPUT_SERVER_SINK_MANAGER_START_MSG_IS_BAD = -64015; constexpr int32_t ERR_DH_INPUT_SERVER_SINK_MANAGER_STOP_MSG_IS_BAD = -64016; constexpr int32_t ERR_DH_INPUT_SERVER_SINK_MANAGER_RELEASE_FAIL = -64017; + constexpr int32_t ERR_DH_INPUT_SERVER_SINK_MANAGER_IS_NULL = -64018; // service source error code constexpr int32_t ERR_DH_INPUT_SERVER_SOURCE_INJECT_REGISTER_FAIL = -65000; constexpr int32_t ERR_DH_INPUT_SERVER_SOURCE_INJECT_UNREGISTER_FAIL = -65001; diff --git a/common/include/input_hub.cpp b/common/include/input_hub.cpp index 55704f9..6288aa7 100644 --- a/common/include/input_hub.cpp +++ b/common/include/input_hub.cpp @@ -189,7 +189,12 @@ size_t InputHub::GetEvents(RawEvent *buffer, size_t bufferSize) } struct input_event readBuffer[bufferSize]; int32_t readSize = read(eventItem.data.fd, readBuffer, sizeof(struct input_event) * capacity); - size_t count = ReadInputEvent(readSize, *GetDeviceByFdLocked(eventItem.data.fd)); + Device* deviceByFd = GetDeviceByFdLocked(eventItem.data.fd); + if (!deviceByFd) { + DHLOGE("Find device by fd: %{public}d failed", eventItem.data.fd); + continue; + } + size_t count = ReadInputEvent(readSize, *deviceByFd); Device* device = GetSupportDeviceByFd(eventItem.data.fd); if (!device) { DHLOGE("Can not find device by fd: %{public}d", eventItem.data.fd); diff --git a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp index db6e65c..a0b47b0 100644 --- a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp +++ b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp @@ -393,6 +393,10 @@ void DistributedInputSinkManager::DInputSinkListener::OnRelayStartDhidRemoteInpu void DistributedInputSinkManager::DInputSinkListener::OnRelayStopDhidRemoteInput(const int32_t &toSrcSessionId, const int32_t &toSinkSessionId, const std::string &deviceId, const std::string &strDhids) { + if (sinkManagerObj_ == nullptr) { + DHLOGE("sinkManagerObj is null."); + return; + } DHLOGI("onRelayStopDhidRemoteInput called, toSinkSessionId: %{public}d", toSinkSessionId); std::vector stopIndeedDhIds; std::vector stopOnCmdDhIds; @@ -423,10 +427,6 @@ void DistributedInputSinkManager::DInputSinkListener::OnRelayStopDhidRemoteInput DHLOGE("Not all devices are stopped."); return; } - if (sinkManagerObj_ == nullptr) { - DHLOGE("sinkManagerObj is null."); - return; - } DistributedInputSinkSwitch::GetInstance().StopAllSwitch(); sinkManagerObj_->SetInputTypes(static_cast(DInputDeviceType::NONE)); if (DistributedInputSinkSwitch::GetInstance().GetSwitchOpenedSession() == @@ -865,6 +865,10 @@ int32_t DistributedInputSinkManager::ProjectWindowListener::ParseMessage(const s int32_t DistributedInputSinkManager::ProjectWindowListener::UpdateSinkScreenInfoCache(const std::string &srcDevId, const uint64_t srcWinId, const SinkScreenInfo &sinkScreenInfoTmp) { + if (sinkManagerObj_ == nullptr) { + DHLOGE("sinkManagerObj is null."); + return ERR_DH_INPUT_SERVER_SINK_MANAGER_IS_NULL; + } std::string srcScreenInfoKey = DInputContext::GetInstance().GetScreenInfoKey(srcDevId, srcWinId); SinkScreenInfo sinkScreenInfo = DInputContext::GetInstance().GetSinkScreenInfo(srcScreenInfoKey); sinkScreenInfo.sinkShowWinId = sinkScreenInfoTmp.sinkShowWinId; @@ -885,7 +889,7 @@ int32_t DistributedInputSinkManager::ProjectWindowListener::UpdateSinkScreenInfo sinkScreenInfo.sinkPhyWidth, sinkScreenInfo.sinkPhyHeight); int32_t ret = DInputContext::GetInstance().UpdateSinkScreenInfo(srcScreenInfoKey, sinkScreenInfo); std::lock_guard lock(sinkManagerObj_->mutex_); - if ((ret == DH_SUCCESS) && (sinkManagerObj_!= nullptr) && (sinkManagerObj_->GetSinkScreenInfosCbackSize() > 0)) { + if ((ret == DH_SUCCESS) && (sinkManagerObj_->GetSinkScreenInfosCbackSize() > 0)) { sinkManagerObj_->CallBackScreenInfoChange(); } return ret; diff --git a/services/sink/transport/src/distributed_input_sink_transport.cpp b/services/sink/transport/src/distributed_input_sink_transport.cpp index 5b53749..df1842d 100644 --- a/services/sink/transport/src/distributed_input_sink_transport.cpp +++ b/services/sink/transport/src/distributed_input_sink_transport.cpp @@ -79,6 +79,10 @@ void DistributedInputSinkTransport::DInputSinkEventHandler::ProcessEvent(const A switch (eventId) { case EHandlerMsgType::DINPUT_SINK_EVENT_HANDLER_MSG: { std::shared_ptr innerMsg = event->GetSharedObject(); + if (innerMsg == nullptr) { + DHLOGE("innerMsg is null."); + break; + } nlohmann::json jsonStr; jsonStr[DINPUT_SOFTBUS_KEY_CMD_TYPE] = TRANS_SINK_MSG_BODY_DATA; jsonStr[DINPUT_SOFTBUS_KEY_INPUT_DATA] = innerMsg->dump(); diff --git a/services/source/inputinject/src/distributed_input_node_manager.cpp b/services/source/inputinject/src/distributed_input_node_manager.cpp index af1f751..c78bf3b 100644 --- a/services/source/inputinject/src/distributed_input_node_manager.cpp +++ b/services/source/inputinject/src/distributed_input_node_manager.cpp @@ -202,7 +202,15 @@ void DistributedInputNodeManager::DInputNodeManagerEventHandler::ScanAllNode( const AppExecFwk::InnerEvent::Pointer &event) { DHLOGI("ScanAllNode enter."); + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *(it); std::string devId = innerMsg[INPUT_NODE_DEVID]; diff --git a/services/source/sourcemanager/src/dinput_source_manager_event_handler.cpp b/services/source/sourcemanager/src/dinput_source_manager_event_handler.cpp index 0039c90..e2d917b 100644 --- a/services/source/sourcemanager/src/dinput_source_manager_event_handler.cpp +++ b/services/source/sourcemanager/src/dinput_source_manager_event_handler.cpp @@ -47,7 +47,15 @@ DInputSourceManagerEventHandler::~DInputSourceManagerEventHandler() void DInputSourceManagerEventHandler::NotifyRegisterCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -79,7 +87,15 @@ void DInputSourceManagerEventHandler::NotifyRegisterCallback(const AppExecFwk::I void DInputSourceManagerEventHandler::NotifyUnregisterCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -100,7 +116,15 @@ void DInputSourceManagerEventHandler::NotifyUnregisterCallback(const AppExecFwk: void DInputSourceManagerEventHandler::NotifyPrepareCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -119,7 +143,15 @@ void DInputSourceManagerEventHandler::NotifyPrepareCallback(const AppExecFwk::In void DInputSourceManagerEventHandler::NotifyUnprepareCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -138,7 +170,15 @@ void DInputSourceManagerEventHandler::NotifyUnprepareCallback(const AppExecFwk:: void DInputSourceManagerEventHandler::NotifyStartCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -164,7 +204,15 @@ void DInputSourceManagerEventHandler::NotifyStartCallback(const AppExecFwk::Inne void DInputSourceManagerEventHandler::NotifyStopCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -201,7 +249,15 @@ void DInputSourceManagerEventHandler::NotifyStopCallback(const AppExecFwk::Inner void DInputSourceManagerEventHandler::NotifyStartDhidCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -220,7 +276,15 @@ void DInputSourceManagerEventHandler::NotifyStartDhidCallback(const AppExecFwk:: void DInputSourceManagerEventHandler::NotifyStopDhidCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -239,7 +303,15 @@ void DInputSourceManagerEventHandler::NotifyStopDhidCallback(const AppExecFwk::I void DInputSourceManagerEventHandler::NotifyKeyStateCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -261,7 +333,15 @@ void DInputSourceManagerEventHandler::NotifyKeyStateCallback(const AppExecFwk::I void DInputSourceManagerEventHandler::NotifyStartServerCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } auto it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_RESULT)) { @@ -276,7 +356,15 @@ void DInputSourceManagerEventHandler::NotifyStartServerCallback(const AppExecFwk void DInputSourceManagerEventHandler::NotifyRelayPrepareCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || @@ -294,7 +382,15 @@ void DInputSourceManagerEventHandler::NotifyRelayPrepareCallback(const AppExecFw void DInputSourceManagerEventHandler::NotifyRelayUnprepareCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || @@ -312,7 +408,15 @@ void DInputSourceManagerEventHandler::NotifyRelayUnprepareCallback(const AppExec void DInputSourceManagerEventHandler::NotifyRelayPrepareRemoteInput(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -344,7 +448,15 @@ void DInputSourceManagerEventHandler::NotifyRelayPrepareRemoteInput(const AppExe void DInputSourceManagerEventHandler::NotifyRelayUnprepareRemoteInput(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsString(innerMsg, INPUT_SOURCEMANAGER_KEY_DEVID) || @@ -372,7 +484,15 @@ void DInputSourceManagerEventHandler::NotifyRelayUnprepareRemoteInput(const AppE void DInputSourceManagerEventHandler::NotifyRelayStartDhidCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || @@ -392,7 +512,15 @@ void DInputSourceManagerEventHandler::NotifyRelayStartDhidCallback(const AppExec void DInputSourceManagerEventHandler::NotifyRelayStopDhidCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || @@ -412,7 +540,15 @@ void DInputSourceManagerEventHandler::NotifyRelayStopDhidCallback(const AppExecF void DInputSourceManagerEventHandler::NotifyRelayStartTypeCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || @@ -432,7 +568,15 @@ void DInputSourceManagerEventHandler::NotifyRelayStartTypeCallback(const AppExec void DInputSourceManagerEventHandler::NotifyRelayStopTypeCallback(const AppExecFwk::InnerEvent::Pointer &event) { + if (event == nullptr) { + DHLOGE("event is null."); + return; + } std::shared_ptr dataMsg = event->GetSharedObject(); + if (dataMsg == nullptr) { + DHLOGE("dataMsg is null."); + return; + } nlohmann::json::iterator it = dataMsg->begin(); nlohmann::json innerMsg = *it; if (!IsInt32(innerMsg, INPUT_SOURCEMANAGER_KEY_VALUE) || diff --git a/test/fuzztest/distributedinputsourcetransport_fuzzer/distributed_input_source_transport_fuzzer.cpp b/test/fuzztest/distributedinputsourcetransport_fuzzer/distributed_input_source_transport_fuzzer.cpp index 452f36c..e76a24a 100644 --- a/test/fuzztest/distributedinputsourcetransport_fuzzer/distributed_input_source_transport_fuzzer.cpp +++ b/test/fuzztest/distributedinputsourcetransport_fuzzer/distributed_input_source_transport_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Copyright (c) 2021-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 @@ -32,7 +32,7 @@ namespace OHOS { namespace DistributedHardware { void OpenInputSoftbusFuzzTest(const uint8_t *data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size == 0)) { return; } diff --git a/test/fuzztest/distributedinputtransportbase_fuzzer/distributed_input_transport_base_fuzzer.cpp b/test/fuzztest/distributedinputtransportbase_fuzzer/distributed_input_transport_base_fuzzer.cpp index ffeac36..c0c3bbd 100644 --- a/test/fuzztest/distributedinputtransportbase_fuzzer/distributed_input_transport_base_fuzzer.cpp +++ b/test/fuzztest/distributedinputtransportbase_fuzzer/distributed_input_transport_base_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-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 @@ -31,7 +31,7 @@ namespace OHOS { namespace DistributedHardware { void StartSessionFuzzTest(const uint8_t *data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size == 0)) { return; } -- Gitee