From ed9cface9bc912b95922b95a73099b38d8981235 Mon Sep 17 00:00:00 2001 From: cuiruibin Date: Sat, 19 Jul 2025 10:15:16 +0800 Subject: [PATCH] =?UTF-8?q?dfs=E7=BC=96=E8=AF=91=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E6=B8=85=E7=90=86=20Signed-off-by:=20cuiruibin=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/distributed_file_daemon_proxy.cpp | 78 ++++++++++++++++--- .../distributedfiledaemon/src/ipc/daemon.cpp | 3 - .../src/ipc/daemon_stub.cpp | 48 +++++++----- .../src/network/kernel_talker.cpp | 4 + .../test/unittest/BUILD.gn | 1 + .../unittest/network/session_pool_test.cpp | 2 +- 6 files changed, 103 insertions(+), 33 deletions(-) diff --git a/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp b/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp index c8be94148..50edc0d5c 100644 --- a/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp +++ b/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp @@ -141,6 +141,7 @@ int32_t DistributedFileDaemonProxy::OpenP2PConnection(const DistributedHardware: } if (!data.WriteUint16(deviceInfo.deviceTypeId)) { LOGE("Failed to send deviceTypeId"); + return OHOS::FileManagement::E_INVAL_ARG; } if (!data.WriteUint32(deviceInfo.range)) { @@ -165,8 +166,13 @@ int32_t DistributedFileDaemonProxy::OpenP2PConnection(const DistributedHardware: LOGE("%{public}s", ss.str().c_str()); return OHOS::FileManagement::E_BROKEN_IPC; } + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } LOGI("Open p2p connection Success"); - return reply.ReadInt32(); + return result; } int32_t DistributedFileDaemonProxy::CloseP2PConnection(const DistributedHardware::DmDeviceInfo &deviceInfo) @@ -217,8 +223,13 @@ int32_t DistributedFileDaemonProxy::CloseP2PConnection(const DistributedHardware LOGE("%{public}s", ss.str().c_str()); return OHOS::FileManagement::E_BROKEN_IPC; } + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } LOGI("Close p2p connection Success"); - return reply.ReadInt32(); + return result; } int32_t DistributedFileDaemonProxy::OpenP2PConnectionEx(const std::string &networkId, @@ -257,8 +268,13 @@ int32_t DistributedFileDaemonProxy::OpenP2PConnectionEx(const std::string &netwo LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } LOGI("DistributedFileDaemonProxy::OpenP2PConnectionEx success."); - return reply.ReadInt32(); + return result; } int32_t DistributedFileDaemonProxy::CloseP2PConnectionEx(const std::string &networkId) @@ -287,8 +303,13 @@ int32_t DistributedFileDaemonProxy::CloseP2PConnectionEx(const std::string &netw LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } LOGI("DistributedFileDaemonProxy::Close p2p connection Success"); - return reply.ReadInt32(); + return result; } int32_t DistributedFileDaemonProxy::PrepareSession(const std::string &srcUri, @@ -344,7 +365,12 @@ int32_t DistributedFileDaemonProxy::PrepareSession(const std::string &srcUri, LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return result; } int32_t DistributedFileDaemonProxy::RequestSendFile(const std::string &srcUri, @@ -387,7 +413,12 @@ int32_t DistributedFileDaemonProxy::RequestSendFile(const std::string &srcUri, LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return result; } int32_t DistributedFileDaemonProxy::GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) @@ -455,7 +486,12 @@ int32_t DistributedFileDaemonProxy::CancelCopyTask(const std::string &sessionNam LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return result; } int32_t DistributedFileDaemonProxy::CancelCopyTask(const std::string &srcUri, const std::string &dstUri) @@ -487,7 +523,12 @@ int32_t DistributedFileDaemonProxy::CancelCopyTask(const std::string &srcUri, co LOGE("SendRequest failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return result; } int32_t DistributedFileDaemonProxy::PushAsset(int32_t userId, @@ -530,7 +571,12 @@ int32_t DistributedFileDaemonProxy::PushAsset(int32_t userId, LOGE("UnRegisterAssetCallback failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)){ + LOGE("failed to read result from reply"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return result; } int32_t DistributedFileDaemonProxy::RegisterAssetCallback(const sptr &recvCallback) @@ -562,7 +608,12 @@ int32_t DistributedFileDaemonProxy::RegisterAssetCallback(const sptr &recvCallback) @@ -594,7 +645,12 @@ int32_t DistributedFileDaemonProxy::UnRegisterAssetCallback(const sptr &uriList, diff --git a/services/distributedfiledaemon/src/ipc/daemon.cpp b/services/distributedfiledaemon/src/ipc/daemon.cpp index df1353580..0d6c937ef 100644 --- a/services/distributedfiledaemon/src/ipc/daemon.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon.cpp @@ -154,9 +154,6 @@ void Daemon::OnStop() if (!subRet) { LOGE("UnSubscribe common event failed"); } - subScriber_ = nullptr; - daemonExecute_ = nullptr; - eventHandler_ = nullptr; SoftBusHandlerAsset::GetInstance().DeleteAssetLocalSessionServer(); AllConnectManager::GetInstance().UnInitAllConnectManager(); LOGI("Stop finished successfully"); diff --git a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp index acf73d0a5..cd05431f7 100644 --- a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp @@ -124,8 +124,10 @@ int32_t DaemonStub::HandleOpenP2PConnection(MessageParcel &data, MessageParcel & deviceInfo.authForm = static_cast(data.ReadInt32()); int32_t res = OpenP2PConnection(deviceInfo); - reply.WriteInt32(res); - LOGI("End OpenP2PConnection, res = %{public}d", res); + if (!reply.WriteInt32(res)) { + LOGE("HandleOpenP2PConnection write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -157,8 +159,10 @@ int32_t DaemonStub::HandleCloseP2PConnection(MessageParcel &data, MessageParcel deviceInfo.authForm = static_cast(data.ReadInt32()); int32_t res = CloseP2PConnection(deviceInfo); - reply.WriteInt32(res); - LOGI("End CloseP2PConnection"); + if (!reply.WriteInt32(res)) { + LOGE("HandleCloseP2PConnection write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -181,8 +185,10 @@ int32_t DaemonStub::HandleOpenP2PConnectionEx(MessageParcel &data, MessageParcel return E_INVAL_ARG; } int32_t res = OpenP2PConnectionEx(networkId, remoteReverseObj); - reply.WriteInt32(res); - LOGI("DaemonStub::End OpenP2PConnection, res = %{public}d.", res); + if (!reply.WriteInt32(res)) { + LOGE("HandleOpenP2PConnectionEx write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -196,8 +202,10 @@ int32_t DaemonStub::HandleCloseP2PConnectionEx(MessageParcel &data, MessageParce } int32_t res = CloseP2PConnectionEx(networkId); - reply.WriteInt32(res); - LOGI("DaemonStub::End CloseP2PConnection"); + if (!reply.WriteInt32(res)) { + LOGE("HandleCloseP2PConnectionEx write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -242,8 +250,10 @@ int32_t DaemonStub::HandlePrepareSession(MessageParcel &data, MessageParcel &rep LOGE("Write sessionName failed"); return E_IPC_WRITE_FAILED; } - reply.WriteInt32(res); - LOGD("End PrepareSession, ret = %{public}d.", res); + if (!reply.WriteInt32(res)) { + LOGE("HandlePrepareSession write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -271,8 +281,10 @@ int32_t DaemonStub::HandleRequestSendFile(MessageParcel &data, MessageParcel &re return E_IPC_READ_FAILED; } auto res = RequestSendFile(srcUri, dstPath, dstDeviceId, sessionName); - reply.WriteInt32(res); - LOGD("End RequestSendFile, ret = %{public}d.", res); + if (!reply.WriteInt32(res)) { + LOGE("HandleRequestSendFile write res failed, res is %{public}d", res); + return E_IPC_WRITE_FAILED; + } return res; } @@ -293,15 +305,15 @@ int32_t DaemonStub::HandleGetRemoteCopyInfo(MessageParcel &data, MessageParcel & } if (!reply.WriteBool(isFile)) { LOGE("Write isFile failed"); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } if (!reply.WriteBool(isDir)) { LOGE("Write isDir failed"); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } if (!reply.WriteInt32(res)) { LOGE("Write res failed"); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } LOGD("End GetRemoteCopyInfo, ret = %{public}d.", res); return res; @@ -359,7 +371,7 @@ int32_t DaemonStub::HandleRegisterRecvCallback(MessageParcel &data, MessageParce int32_t res = RegisterAssetCallback(recvCallback); if (!reply.WriteInt32(res)) { LOGE("RegisterRecvCallback write res failed, res is %{public}d", res); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } return res; } @@ -389,7 +401,7 @@ int32_t DaemonStub::HandleUnRegisterRecvCallback(MessageParcel &data, MessagePar int32_t res = UnRegisterAssetCallback(recvCallback); if (!reply.WriteInt32(res)) { LOGE("UnRegisterRecvCallback write res failed, res is %{public}d", res); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } return res; } @@ -432,7 +444,7 @@ int32_t DaemonStub::HandlePushAsset(MessageParcel &data, MessageParcel &reply) int32_t res = PushAsset(userId, assetObj, sendCallback); if (!reply.WriteInt32(res)) { LOGE("PushAsset write res failed, res is %{public}d", res); - return E_IPC_READ_FAILED; + return E_IPC_WRITE_FAILED; } return res; } diff --git a/services/distributedfiledaemon/src/network/kernel_talker.cpp b/services/distributedfiledaemon/src/network/kernel_talker.cpp index 57381becd..64b9157da 100644 --- a/services/distributedfiledaemon/src/network/kernel_talker.cpp +++ b/services/distributedfiledaemon/src/network/kernel_talker.cpp @@ -110,6 +110,10 @@ void KernelTalker::SinkDevslTokernel(const std::string &cid, uint32_t devsl) .devsl = devsl, }; + if (cid.length() < CID_MAX_LEN) { + LOGE("cid lengh err, cid:%{public}s, length:%{public}zu", Utils::GetAnonyString(cid).c_str(), cid.length()); + return; + } if (memcpy_s(cmd.cid, CID_MAX_LEN, cid.c_str(), CID_MAX_LEN)) { return; } diff --git a/services/distributedfiledaemon/test/unittest/BUILD.gn b/services/distributedfiledaemon/test/unittest/BUILD.gn index ab370b8af..a8cbcfa0a 100644 --- a/services/distributedfiledaemon/test/unittest/BUILD.gn +++ b/services/distributedfiledaemon/test/unittest/BUILD.gn @@ -1377,6 +1377,7 @@ group("unittest") { ":devsl_dispatcher_test", ":kernel_talker_test", ":os_account_observer_test", + "session_pool_test", ":softbus_agent_sup_test", ":softbus_agent_test", ":softbus_asset_recv_listener_test", diff --git a/services/distributedfiledaemon/test/unittest/network/session_pool_test.cpp b/services/distributedfiledaemon/test/unittest/network/session_pool_test.cpp index f5ece8cc1..14705c223 100644 --- a/services/distributedfiledaemon/test/unittest/network/session_pool_test.cpp +++ b/services/distributedfiledaemon/test/unittest/network/session_pool_test.cpp @@ -164,7 +164,7 @@ HWTEST_F(SessionPoolTest, SessionPoolTest_HoldSession_0101, TestSize.Level1) auto size = pool->usrSpaceSessionPool_.size(); pool->talker_ = nullptr; pool->HoldSession(session, "Server"); - EXPECT_EQ(pool->usrSpaceSessionPool_.size(), size + 1); + EXPECT_EQ(pool->usrSpaceSessionPool_.size(), size); } catch (const exception &e) { res = false; LOGE("%{public}s", e.what()); -- Gitee