From dc63478b12f496de180f8534a702985f0ff6542a Mon Sep 17 00:00:00 2001 From: zhaochaoyan Date: Tue, 2 Sep 2025 16:23:53 +0800 Subject: [PATCH] =?UTF-8?q?6.0=E4=BB=A3=E7=A0=81=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhaochaoyan --- common/src/ipc/standard/ipc_model_codec.cpp | 14 ++++ .../include/deviceprofile_connector.h | 1 + .../src/deviceprofile_connector.cpp | 22 ++++-- .../native_cpp/src/device_manager_impl.cpp | 2 - sa_profile/device_manager.cfg | 3 +- .../include/authentication/dm_auth_manager.h | 8 +- .../authentication_v2/dm_auth_manager_base.h | 2 +- .../hichain/hichain_connector_callback.h | 2 +- .../src/authentication/dm_auth_manager.cpp | 75 +++++++++++++++---- .../auth_stages/auth_confirm.cpp | 12 ++- .../auth_stages/auth_negotiate.cpp | 18 +++-- .../dm_auth_manager_base.cpp | 2 +- .../dependency/hichain/hichain_connector.cpp | 8 +- .../standard/permission_manager.cpp | 4 +- .../device_manager_fa_test/BUILD.gn | 1 + .../authenticate_device_service_fuzzer.cpp | 15 ++-- .../dm_auth_manager_fuzzer.cpp | 3 +- .../generate_encrypted_uuid_fuzzer.cpp | 10 ++- .../hichain_connector_fuzzer.cpp | 3 +- .../onerror_fuzzer/on_error_fuzzer.cpp | 3 +- .../onfinish_fuzzer/on_finish_fuzzer.cpp | 3 +- .../onrequest_fuzzer/on_request_fuzzer.cpp | 3 +- .../pinauthui_fuzzer/pinauthui_fuzzer.cpp | 6 +- .../UTTest_dm_auth_manager_first.cpp | 4 +- .../UTTest_dm_auth_manager_second.cpp | 20 ++--- .../UTTest_hichain_connector.cpp | 3 +- .../commonunittest/UTTest_hichain_connector.h | 2 +- .../device_manager_notify_fuzzer.cpp | 9 ++- .../devicemanagerservice_fuzzer/BUILD.gn | 1 + .../device_manager_service_fuzzer.cpp | 4 +- .../devicenamemanager_fuzzer/BUILD.gn | 2 +- .../device_profile_connector_fuzzer.cpp | 2 +- .../device_publish_fuzzer.cpp | 21 ++++-- .../dmcommtool_fuzzer/BUILD.gn | 1 + .../dmtransportmsg_fuzzer/BUILD.gn | 2 +- .../get_local_device_info_fuzzer.cpp | 6 +- .../ipcserverstub_fuzzer/BUILD.gn | 3 - .../ipc_server_stub_fuzzer.cpp | 5 +- .../notify_event_fuzzer.cpp | 6 +- .../set_user_operation_fuzzer.cpp | 5 +- .../on_session_opened_fuzzer.cpp | 10 +-- .../publish_softbus_lnn_fuzzer.cpp | 3 + .../softbus_connector_fuzzer.cpp | 6 +- .../softbus_connector_publish_fuzzer.cpp | 3 +- .../softbus_connector_state_fuzzer.cpp | 5 +- .../softbus_listener_fuzzer.cpp | 4 +- ...s_listener_get_local_deviceinfo_fuzzer.cpp | 9 ++- utils/src/crypto/dm_crypto.cpp | 5 +- 48 files changed, 233 insertions(+), 128 deletions(-) diff --git a/common/src/ipc/standard/ipc_model_codec.cpp b/common/src/ipc/standard/ipc_model_codec.cpp index 63c05ae86..bd0573e02 100644 --- a/common/src/ipc/standard/ipc_model_codec.cpp +++ b/common/src/ipc/standard/ipc_model_codec.cpp @@ -35,21 +35,32 @@ constexpr uint32_t IPC_VECTOR_MAX_SIZE = 1000; } \ } while (0) + #define CHECK_CPY_SIZE_RETURN(destSize, srcSize) \ + do { \ + if ((destSize) <= (srcSize)) { \ + LOGE("params size invalid"); \ + return; \ + } \ + } while (0) + //LCOV_EXCL_START void IpcModelCodec::DecodeDmDeviceBasicInfo(MessageParcel &parcel, DmDeviceBasicInfo &devInfo) { std::string deviceIdStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_ID_LEN, deviceIdStr.size()); if (strcpy_s(devInfo.deviceId, deviceIdStr.size() + 1, deviceIdStr.c_str()) != DM_OK) { LOGE("strcpy_s deviceId failed!"); return; } std::string deviceNameStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_NAME_LEN, deviceNameStr.size()); if (strcpy_s(devInfo.deviceName, deviceNameStr.size() + 1, deviceNameStr.c_str()) != DM_OK) { LOGE("strcpy_s deviceName failed!"); return; } devInfo.deviceTypeId = parcel.ReadUint16(); std::string networkIdStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_ID_LEN, networkIdStr.size()); if (strcpy_s(devInfo.networkId, networkIdStr.size() + 1, networkIdStr.c_str()) != DM_OK) { LOGE("strcpy_s networkId failed!"); return; @@ -338,17 +349,20 @@ bool IpcModelCodec::EncodeDmDeviceIconInfoFilterOptions(const DmDeviceIconInfoFi void IpcModelCodec::DecodeDmDeviceInfo(MessageParcel &parcel, DmDeviceInfo &devInfo) { std::string deviceIdStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_ID_LEN, deviceIdStr.size()); if (strcpy_s(devInfo.deviceId, deviceIdStr.size() + 1, deviceIdStr.c_str()) != DM_OK) { LOGE("strcpy_s deviceId failed!"); return; } std::string deviceNameStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_NAME_LEN, deviceNameStr.size()); if (strcpy_s(devInfo.deviceName, deviceNameStr.size() + 1, deviceNameStr.c_str()) != DM_OK) { LOGE("strcpy_s deviceName failed!"); return; } devInfo.deviceTypeId = parcel.ReadUint16(); std::string networkIdStr = parcel.ReadString(); + CHECK_CPY_SIZE_RETURN(DM_MAX_DEVICE_ID_LEN, networkIdStr.size()); if (strcpy_s(devInfo.networkId, networkIdStr.size() + 1, networkIdStr.c_str()) != DM_OK) { LOGE("strcpy_s networkId failed!"); return; diff --git a/commondependency/include/deviceprofile_connector.h b/commondependency/include/deviceprofile_connector.h index 3923a314d..d70508c81 100644 --- a/commondependency/include/deviceprofile_connector.h +++ b/commondependency/include/deviceprofile_connector.h @@ -372,6 +372,7 @@ private: void UpdatePeerUserId(DistributedDeviceProfile::AccessControlProfile profile, std::string &localUdid, const std::vector &localUserIds, const std::string &remoteUdid, const std::vector &remoteFrontUserIds); + void SetProcessInfoPkgName(const DistributedDeviceProfile::AccessControlProfile &acl, ProcessInfo &processInfo); bool CheckAclStatusNotMatch(const DistributedDeviceProfile::AccessControlProfile &profile, const std::string &localUdid, const std::vector &foregroundUserIds, const std::vector &backgroundUserIds); diff --git a/commondependency/src/deviceprofile_connector.cpp b/commondependency/src/deviceprofile_connector.cpp index b43bd68c1..229a6dde6 100644 --- a/commondependency/src/deviceprofile_connector.cpp +++ b/commondependency/src/deviceprofile_connector.cpp @@ -1223,8 +1223,7 @@ DM_EXPORT bool DeviceProfileConnector::DeleteAclForAccountLogOut( accesserAccountId == accountId) { offlineParam.bindType = item.GetBindType(); ProcessInfo processInfo; - processInfo.pkgName = item.GetAccesser().GetAccesserBundleName(); - processInfo.pkgName = processInfo.pkgName.empty() ? std::string(DM_PKG_NAME) : processInfo.pkgName; + SetProcessInfoPkgName(item, processInfo); processInfo.userId = item.GetAccesser().GetAccesserUserId(); offlineParam.processVec.emplace_back(processInfo); notifyOffline = (item.GetStatus() == ACTIVE); @@ -1236,8 +1235,7 @@ DM_EXPORT bool DeviceProfileConnector::DeleteAclForAccountLogOut( accesseeAccountId == accountId) { offlineParam.bindType = item.GetBindType(); ProcessInfo processInfo; - processInfo.pkgName = item.GetAccessee().GetAccesseeBundleName(); - processInfo.pkgName = processInfo.pkgName.empty() ? std::string(DM_PKG_NAME) : processInfo.pkgName; + SetProcessInfoPkgName(item, processInfo); processInfo.userId = item.GetAccessee().GetAccesseeUserId(); offlineParam.processVec.emplace_back(processInfo); notifyOffline = (item.GetStatus() == ACTIVE); @@ -1289,8 +1287,7 @@ void DeviceProfileConnector::CacheOfflineParam(const DistributedDeviceProfile::A std::string(accesseeAccountIdHash) == accountIdHash) { offlineParam.bindType = profile.GetBindType(); ProcessInfo processInfo; - processInfo.pkgName = profile.GetAccesser().GetAccesserBundleName(); - processInfo.pkgName = processInfo.pkgName.empty() ? std::string(DM_PKG_NAME) : processInfo.pkgName; + SetProcessInfoPkgName(profile, processInfo); processInfo.userId = profile.GetAccesser().GetAccesserUserId(); offlineParam.processVec.emplace_back(processInfo); notifyOffline = (profile.GetStatus() == ACTIVE); @@ -1302,8 +1299,7 @@ void DeviceProfileConnector::CacheOfflineParam(const DistributedDeviceProfile::A std::string(accesserAccountIdHash) == accountIdHash) { offlineParam.bindType = profile.GetBindType(); ProcessInfo processInfo; - processInfo.pkgName = profile.GetAccessee().GetAccesseeBundleName(); - processInfo.pkgName = processInfo.pkgName.empty() ? std::string(DM_PKG_NAME) : processInfo.pkgName; + SetProcessInfoPkgName(profile, processInfo); processInfo.userId = profile.GetAccessee().GetAccesseeUserId(); offlineParam.processVec.emplace_back(processInfo); notifyOffline = (profile.GetStatus() == ACTIVE); @@ -2595,6 +2591,16 @@ void DeviceProfileConnector::UpdatePeerUserId(AccessControlProfile profile, std: } } +void DeviceProfileConnector::SetProcessInfoPkgName(const DistributedDeviceProfile::AccessControlProfile &acl, + ProcessInfo &processInfo) +{ + if (acl.GetBindType() == DM_IDENTICAL_ACCOUNT || acl.GetBindLevel() == USER) { + processInfo.pkgName = std::string(DM_PKG_NAME); + } else { + processInfo.pkgName = acl.GetAccesser().GetAccesserBundleName(); + } +} + DM_EXPORT std::multimap DeviceProfileConnector::GetDevIdAndUserIdByActHash( const std::string &localUdid, const std::string &peerUdid, int32_t peerUserId, const std::string &peerAccountHash) diff --git a/interfaces/inner_kits/native_cpp/src/device_manager_impl.cpp b/interfaces/inner_kits/native_cpp/src/device_manager_impl.cpp index d07c6ff68..23aa74e64 100644 --- a/interfaces/inner_kits/native_cpp/src/device_manager_impl.cpp +++ b/interfaces/inner_kits/native_cpp/src/device_manager_impl.cpp @@ -307,7 +307,6 @@ int32_t DeviceManagerImpl::GetAvailableDeviceList(const std::string &pkgName, ConvertDeviceInfoToDeviceBasicInfo(item, deviceBasicInfo); deviceList.push_back(deviceBasicInfo); } - LOGI("Completed, device size %{public}zu", deviceList.size()); return DM_OK; } @@ -378,7 +377,6 @@ int32_t DeviceManagerImpl::GetLocalDeviceInfo(const std::string &pkgName, DmDevi info = rsp->GetLocalDeviceInfo(); DmTraceEnd(); - LOGI("Completed"); SysEventWrite(std::string(GET_LOCAL_DEVICE_INFO_SUCCESS), DM_HISYEVENT_BEHAVIOR, std::string(GET_LOCAL_DEVICE_INFO_SUCCESS_MSG)); DmRadarHelper::GetInstance().ReportGetLocalDevInfo(pkgName, "GetLocalDeviceInfo", diff --git a/sa_profile/device_manager.cfg b/sa_profile/device_manager.cfg index 433c2ef61..0110d5f33 100644 --- a/sa_profile/device_manager.cfg +++ b/sa_profile/device_manager.cfg @@ -43,7 +43,8 @@ "ohos.permission.ACCESS_DEVAUTH_CRED_PRIVILEGE", "ohos.permission.ACCESS_IDS", "ohos.permission.sec.ACCESS_UDID", - "ohos.permission.QUERY_SECURITY_MODEL_RESULT" + "ohos.permission.QUERY_SECURITY_MODEL_RESULT", + "ohos.permission.START_ABILITIES_FROM_BACKGROUND" ], "permission_acls" : [ "ohos.permission.MANAGE_SOFTBUS_NETWORK", diff --git a/services/implementation/include/authentication/dm_auth_manager.h b/services/implementation/include/authentication/dm_auth_manager.h index a4d1ec014..1d3f72374 100644 --- a/services/implementation/include/authentication/dm_auth_manager.h +++ b/services/implementation/include/authentication/dm_auth_manager.h @@ -278,7 +278,7 @@ public: * @tc.desc: Join Member of the DeviceManager Authenticate Manager * @tc.type: FUNC */ - void OnMemberJoin(int64_t requestId, int32_t status); + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode); /** * @tc.name: DmAuthManager::EstablishAuthChannel @@ -595,6 +595,8 @@ private: void ProcessReqPublicKey(); void RegisterCleanNotifyCallback(CleanNotifyCallback cleanNotifyCallback); void GetBindCallerInfo(); + void ProcessReqAuthTerminate(); + void ResetParams(); private: std::shared_ptr softbusConnector_; @@ -645,6 +647,10 @@ private: CleanNotifyCallback cleanNotifyCallback_{nullptr}; std::mutex bindParamMutex_; std::map bindParam_; + std::mutex groupMutex_; + bool isAddMember_ = false; + bool isCreateGroup_ = false; + bool transitToFinishState_ = false; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/implementation/include/authentication_v2/dm_auth_manager_base.h b/services/implementation/include/authentication_v2/dm_auth_manager_base.h index c680323a4..d3a4fa411 100644 --- a/services/implementation/include/authentication_v2/dm_auth_manager_base.h +++ b/services/implementation/include/authentication_v2/dm_auth_manager_base.h @@ -144,7 +144,7 @@ public: virtual void OnGroupCreated(int64_t requestId, const std::string &groupId); - virtual void OnMemberJoin(int64_t requestId, int32_t status); + virtual void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode); virtual int32_t EstablishAuthChannel(const std::string &deviceId); diff --git a/services/implementation/include/dependency/hichain/hichain_connector_callback.h b/services/implementation/include/dependency/hichain/hichain_connector_callback.h index 5590744cc..4c90cd961 100644 --- a/services/implementation/include/dependency/hichain/hichain_connector_callback.h +++ b/services/implementation/include/dependency/hichain/hichain_connector_callback.h @@ -21,7 +21,7 @@ namespace DistributedHardware { class IHiChainConnectorCallback { public: virtual void OnGroupCreated(int64_t requestId, const std::string &groupId) = 0; - virtual void OnMemberJoin(int64_t requestId, int32_t status) = 0; + virtual void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) = 0; virtual std::string GetConnectAddr(std::string deviceId) = 0; virtual int32_t GetPinCode(std::string &code) = 0; }; diff --git a/services/implementation/src/authentication/dm_auth_manager.cpp b/services/implementation/src/authentication/dm_auth_manager.cpp index 42dc1d7df..e237a3678 100644 --- a/services/implementation/src/authentication/dm_auth_manager.cpp +++ b/services/implementation/src/authentication/dm_auth_manager.cpp @@ -577,6 +577,14 @@ void DmAuthManager::OnSessionClosed(const int32_t sessionId) { LOGI("DmAuthManager::OnSessionClosed sessionId = %{public}d", sessionId); if (authResponseState_ != nullptr && authResponseContext_ != nullptr) { + { + std::lock_guard lock(groupMutex_); + if (authResponseState_->GetStateType() == AUTH_RESPONSE_SHOW && + authResponseContext_->reply == DM_OK && isCreateGroup_ && !isAddMember_) { + LOGI("wait addmemer callback"); + return; + } + } isFinishOfLocal_ = false; authResponseContext_->state = authResponseState_->GetStateType(); authResponseState_->TransitionTo(std::make_shared()); @@ -664,14 +672,7 @@ void DmAuthManager::ProcessSinkMsg() } break; case MSG_TYPE_REQ_AUTH_TERMINATE: - if (authResponseState_->GetStateType() != AuthState::AUTH_RESPONSE_FINISH) { - isFinishOfLocal_ = false; - authResponseContext_->state = authResponseState_->GetStateType(); - if (authResponseContext_->reply == DM_OK) { - authResponseContext_->state = AuthState::AUTH_RESPONSE_FINISH; - } - authResponseState_->TransitionTo(std::make_shared()); - } + ProcessReqAuthTerminate(); break; case MSG_TYPE_REQ_PUBLICKEY: ProcessReqPublicKey(); @@ -691,6 +692,27 @@ void DmAuthManager::ProcessSinkMsg() } } +void DmAuthManager::ProcessReqAuthTerminate() +{ + { + std::lock_guard lock(groupMutex_); + if (authResponseState_->GetStateType() == AUTH_RESPONSE_SHOW && + authResponseContext_->reply == DM_OK && isCreateGroup_ && !isAddMember_) { + LOGI("wait addmemer callback"); + transitToFinishState_ = true; + return; + } + } + if (authResponseState_->GetStateType() != AuthState::AUTH_RESPONSE_FINISH) { + isFinishOfLocal_ = false; + authResponseContext_->state = authResponseState_->GetStateType(); + if (authResponseContext_->reply == DM_OK) { + authResponseContext_->state = AuthState::AUTH_RESPONSE_FINISH; + } + authResponseState_->TransitionTo(std::make_shared()); + } +} + void DmAuthManager::OnDataReceived(const int32_t sessionId, const std::string message) { if (authResponseContext_ == nullptr || authMessageProcessor_ == nullptr || @@ -740,7 +762,6 @@ void DmAuthManager::OnGroupCreated(int64_t requestId, const std::string &groupId softbusConnector_->GetSoftbusSession()->SendData(authResponseContext_->sessionId, message); return; } - CompatiblePutAcl(); std::string pinCode = ""; if (authResponseContext_->authType == AUTH_TYPE_IMPORT_AUTH_CODE && !importAuthCode_.empty()) { GetAuthCode(authResponseContext_->hostPkgName, pinCode); @@ -764,7 +785,7 @@ void DmAuthManager::OnGroupCreated(int64_t requestId, const std::string &groupId authResponseState_->TransitionTo(std::make_shared()); } -void DmAuthManager::OnMemberJoin(int64_t requestId, int32_t status) +void DmAuthManager::OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) { isAddingMember_ = false; if (authResponseContext_ == nullptr || authUiStateMgr_ == nullptr) { @@ -772,6 +793,25 @@ void DmAuthManager::OnMemberJoin(int64_t requestId, int32_t status) return; } LOGI("DmAuthManager OnMemberJoin start authTimes %{public}d", authTimes_); + if (status == DM_OK && operationCode == GroupOperationCode::MEMBER_JOIN) { + LOGI("join group success."); + CompatiblePutAcl(); + { + std::lock_guard lock(groupMutex_); + isAddMember_ = true; + if (transitToFinishState_) { + LOGI("Have received src finish state."); + authResponseContext_->state = AuthState::AUTH_RESPONSE_FINISH; + authResponseState_->TransitionTo(std::make_shared()); + } + } + } + if (status == DM_OK && operationCode == GroupOperationCode::GROUP_CREATE) { + { + std::lock_guard lock(groupMutex_); + isCreateGroup_ = true; + } + } if ((authRequestState_ != nullptr) && (authResponseState_ == nullptr)) { MemberJoinAuthRequest(requestId, status); } else if ((authResponseState_ != nullptr) && (authRequestState_ == nullptr)) { @@ -798,10 +838,6 @@ void DmAuthManager::MemberJoinAuthRequest(int64_t requestId, int32_t status) if (timer_ != nullptr) { timer_->DeleteTimer(std::string(ADD_TIMEOUT_TASK)); } - if (status == DM_OK) { - LOGI("join group success."); - CompatiblePutAcl(); - } if (authResponseContext_->authType == AUTH_TYPE_IMPORT_AUTH_CODE) { HandleMemberJoinImportAuthCode(requestId, status); return; @@ -1515,6 +1551,12 @@ void DmAuthManager::AuthenticateFinish() } else if (authRequestState_ != nullptr) { SrcAuthenticateFinish(); } + ResetParams(); + LOGI("DmAuthManager::AuthenticateFinish complete"); +} + +void DmAuthManager::ResetParams() +{ isFinishOfLocal_ = true; authResponseContext_ = nullptr; authMessageProcessor_ = nullptr; @@ -1522,10 +1564,12 @@ void DmAuthManager::AuthenticateFinish() authRequestStateTemp_ = nullptr; authenticationType_ = USER_OPERATION_TYPE_ALLOW_AUTH; bundleName_ = ""; + isAddMember_ = false; + isCreateGroup_ = false; + transitToFinishState_ = false; if (cleanNotifyCallback_ != nullptr) { cleanNotifyCallback_(0); } - LOGI("DmAuthManager::AuthenticateFinish complete"); } int32_t DmAuthManager::RegisterUiStateCallback(const std::string pkgName) @@ -2317,6 +2361,7 @@ void DmAuthManager::ResponseCredential() bool DmAuthManager::AuthDeviceTransmit(int64_t requestId, const uint8_t *data, uint32_t dataLen) { LOGI("DmAuthManager::onTransmit start."); + CHECK_NULL_RETURN(authResponseContext_, false); if (requestId != authResponseContext_->requestId) { LOGE("DmAuthManager::onTransmit requestId %{public}" PRId64"is error.", requestId); return false; diff --git a/services/implementation/src/authentication_v2/auth_stages/auth_confirm.cpp b/services/implementation/src/authentication_v2/auth_stages/auth_confirm.cpp index 28ed7e71f..640993f3f 100644 --- a/services/implementation/src/authentication_v2/auth_stages/auth_confirm.cpp +++ b/services/implementation/src/authentication_v2/auth_stages/auth_confirm.cpp @@ -197,8 +197,10 @@ void AuthSrcConfirmState::GetSrcCredType(std::shared_ptr context, CHECK_NULL_VOID(context); std::vector deleteCredInfo; for (const auto &item : credInfo.Items()) { - if (!item.Contains(FILED_CRED_TYPE) || !item[FILED_CRED_TYPE].IsNumberInteger() || - !item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + if (!item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + continue; + } + if (!item.Contains(FILED_CRED_TYPE) || !item[FILED_CRED_TYPE].IsNumberInteger()) { deleteCredInfo.push_back(item[FILED_CRED_ID].Get()); DirectlyDeleteCredential(context, context->accesser.userId, item); continue; @@ -553,10 +555,12 @@ void AuthSrcConfirmState::GetSrcCredentialInfo(std::shared_ptr co } std::vector deleteCredInfo; for (auto &item : credInfo.Items()) { // id1:json1, id2:json2, id3:json3 + if (!item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + continue; + } uint32_t credType = DmAuthState::GetCredentialType(context, item); if (credType == DM_INVALIED_TYPE || !item.Contains(FILED_CRED_TYPE) || - !item[FILED_CRED_TYPE].IsNumberInteger() || !item.Contains(FILED_CRED_ID) || - !item[FILED_CRED_ID].IsString()) { + !item[FILED_CRED_TYPE].IsNumberInteger()) { deleteCredInfo.push_back(item[FILED_CRED_ID].Get()); continue; } diff --git a/services/implementation/src/authentication_v2/auth_stages/auth_negotiate.cpp b/services/implementation/src/authentication_v2/auth_stages/auth_negotiate.cpp index 853d616dc..c67434199 100644 --- a/services/implementation/src/authentication_v2/auth_stages/auth_negotiate.cpp +++ b/services/implementation/src/authentication_v2/auth_stages/auth_negotiate.cpp @@ -303,8 +303,10 @@ void AuthSinkNegotiateStateMachine::GetSinkCredType(std::shared_ptr deleteCredInfo; for (const auto &item : credInfo.Items()) { - if (!item.Contains(FILED_CRED_TYPE) || !item[FILED_CRED_TYPE].IsNumberInteger() || - !item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + if (!item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + continue; + } + if (!item.Contains(FILED_CRED_TYPE) || !item[FILED_CRED_TYPE].IsNumberInteger()) { deleteCredInfo.push_back(item[FILED_CRED_ID].Get()); DirectlyDeleteCredential(context, context->accessee.userId, item); continue; @@ -378,8 +380,10 @@ void AuthSinkNegotiateStateMachine::GetSinkProxyCredTypeForP2P(std::shared_ptrproxyAccessee.credInfoJson); } for (const auto &credItem : credInfoJson.Items()) { - if (!credItem.Contains(FILED_CRED_TYPE) || !credItem[FILED_CRED_TYPE].IsNumberInteger() || - !credItem.Contains(FILED_CRED_ID) || !credItem[FILED_CRED_ID].IsString()) { + if (!credItem.Contains(FILED_CRED_ID) || !credItem[FILED_CRED_ID].IsString()) { + continue; + } + if (!credItem.Contains(FILED_CRED_TYPE) || !credItem[FILED_CRED_TYPE].IsNumberInteger()) { deleteCredInfo.push_back(credItem[FILED_CRED_ID].Get()); DirectlyDeleteCredential(context, context->accessee.userId, credItem); continue; @@ -661,10 +665,12 @@ void AuthSinkNegotiateStateMachine::GetSinkCredentialInfo(std::shared_ptr deleteCredInfo; for (auto& item : credInfo.Items()) { // id1:json1, id2:json2, id3:json3 + if (!item.Contains(FILED_CRED_ID) || !item[FILED_CRED_ID].IsString()) { + continue; + } uint32_t credType = DmAuthState::GetCredentialType(context, item); if (credType == DM_INVALIED_TYPE || !item.Contains(FILED_CRED_TYPE) || - !item[FILED_CRED_TYPE].IsNumberInteger() || !item.Contains(FILED_CRED_ID) || - !item[FILED_CRED_ID].IsString()) { + !item[FILED_CRED_TYPE].IsNumberInteger()) { deleteCredInfo.push_back(item[FILED_CRED_ID].Get()); continue; } diff --git a/services/implementation/src/authentication_v2/dm_auth_manager_base.cpp b/services/implementation/src/authentication_v2/dm_auth_manager_base.cpp index 3c9fb29de..f5ec91846 100644 --- a/services/implementation/src/authentication_v2/dm_auth_manager_base.cpp +++ b/services/implementation/src/authentication_v2/dm_auth_manager_base.cpp @@ -171,7 +171,7 @@ void AuthManagerBase::OnGroupCreated(int64_t requestId, const std::string &group LOGE("OnGroupCreated is not implemented in the current version"); } -void AuthManagerBase::OnMemberJoin(int64_t requestId, int32_t status) +void AuthManagerBase::OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) { LOGE("OnMemberJoin is not implemented in the current version"); } diff --git a/services/implementation/src/dependency/hichain/hichain_connector.cpp b/services/implementation/src/dependency/hichain/hichain_connector.cpp index 6b3fda504..ea4ddd7b2 100644 --- a/services/implementation/src/dependency/hichain/hichain_connector.cpp +++ b/services/implementation/src/dependency/hichain/hichain_connector.cpp @@ -336,7 +336,7 @@ int32_t HiChainConnector::AddMember(const std::string &deviceId, const std::stri LOGE("DecodeRequestAuth jsonStr error"); return ERR_DM_FAILED; } - if (!IsString(jsonObject, TAG_DEVICE_ID) || !IsInt32(jsonObject, PIN_CODE_KEY) || + if (!IsString(jsonObject, TAG_DEVICE_ID) || !IsString(jsonObject, PIN_CODE_KEY) || !IsString(jsonObject, TAG_GROUP_ID) || !IsInt64(jsonObject, TAG_REQUEST_ID) || !IsString(jsonObject, TAG_GROUP_NAME)) { LOGE("HiChainConnector::AddMember err json string."); @@ -386,7 +386,7 @@ void HiChainConnector::onFinish(int64_t requestId, int operationCode, const char SysEventWrite(std::string(ADD_HICHAIN_GROUP_SUCCESS), DM_HISYEVENT_BEHAVIOR, std::string(ADD_HICHAIN_GROUP_SUCCESS_MSG)); if (hiChainConnectorCallback_ != nullptr) { - hiChainConnectorCallback_->OnMemberJoin(requestId, DM_OK); + hiChainConnectorCallback_->OnMemberJoin(requestId, DM_OK, operationCode); } } if (operationCode == GroupOperationCode::GROUP_CREATE) { @@ -405,7 +405,7 @@ void HiChainConnector::onFinish(int64_t requestId, int operationCode, const char } } else { if (hiChainConnectorCallback_ != nullptr) { - hiChainConnectorCallback_->OnMemberJoin(requestId, DM_OK); + hiChainConnectorCallback_->OnMemberJoin(requestId, DM_OK, operationCode); hiChainConnectorCallback_->OnGroupCreated(requestId, data); } } @@ -439,7 +439,7 @@ void HiChainConnector::onError(int64_t requestId, int operationCode, int errorCo SysEventWrite(std::string(ADD_HICHAIN_GROUP_FAILED), DM_HISYEVENT_BEHAVIOR, std::string(ADD_HICHAIN_GROUP_FAILED_MSG)); if (hiChainConnectorCallback_ != nullptr) { - hiChainConnectorCallback_->OnMemberJoin(requestId, ERR_DM_ADD_GROUP_FAILED); + hiChainConnectorCallback_->OnMemberJoin(requestId, ERR_DM_ADD_GROUP_FAILED, operationCode); } } if (operationCode == GroupOperationCode::GROUP_CREATE) { diff --git a/services/service/src/permission/standard/permission_manager.cpp b/services/service/src/permission/standard/permission_manager.cpp index fbcd70775..82de58fda 100644 --- a/services/service/src/permission/standard/permission_manager.cpp +++ b/services/service/src/permission/standard/permission_manager.cpp @@ -141,7 +141,6 @@ int32_t PermissionManager::GetCallerProcessName(std::string &processName) LOGE("GetCallerProcessName GetCallingTokenID error."); return ERR_DM_FAILED; } - LOGI("tokenCaller ID == %{public}s", GetAnonyInt32(tokenCaller).c_str()); ATokenTypeEnum tokenTypeFlag = AccessTokenKit::GetTokenTypeFlag(tokenCaller); if (tokenTypeFlag == ATokenTypeEnum::TOKEN_HAP) { HapTokenInfo tokenInfo; @@ -167,7 +166,8 @@ int32_t PermissionManager::GetCallerProcessName(std::string &processName) return ERR_DM_FAILED; } - LOGI("Get process name: %{public}s success.", processName.c_str()); + LOGI("Get process name: %{public}s success, tokenCaller ID == %{public}s.", processName.c_str(), + GetAnonyInt32(tokenCaller).c_str()); return DM_OK; } diff --git a/test/benchmarktest/device_manager_fa_test/BUILD.gn b/test/benchmarktest/device_manager_fa_test/BUILD.gn index ee21f1172..104218476 100644 --- a/test/benchmarktest/device_manager_fa_test/BUILD.gn +++ b/test/benchmarktest/device_manager_fa_test/BUILD.gn @@ -38,6 +38,7 @@ ohos_benchmarktest("DeviceManagerFaTest") { "access_token:libnativetoken", "access_token:libtoken_setproc", "bounds_checking_function:libsec_shared", + "distributed_hardware_fwk:distributedhardwareutils", "cJSON:cjson_static", "dsoftbus:softbus_client", "ipc:ipc_single", diff --git a/test/commonfuzztest/authenticatedeviceservice_fuzzer/authenticate_device_service_fuzzer.cpp b/test/commonfuzztest/authenticatedeviceservice_fuzzer/authenticate_device_service_fuzzer.cpp index f2653de5f..a3e40ec26 100644 --- a/test/commonfuzztest/authenticatedeviceservice_fuzzer/authenticate_device_service_fuzzer.cpp +++ b/test/commonfuzztest/authenticatedeviceservice_fuzzer/authenticate_device_service_fuzzer.cpp @@ -57,16 +57,13 @@ void AuthenticateDeviceServiceFuzzTest(const uint8_t* data, size_t size) } AddPermission(); - std::string pkgName(reinterpret_cast(data), size); - std::string extra(reinterpret_cast(data), size); - std::string deviceId(reinterpret_cast(data), size); - std::string udid; - std::string network; - std::string device; - int32_t authType = 1; - DmAuthParam authParam; - std::vector deviceBasicInfoList; FuzzedDataProvider fdp(data, size); + std::string pkgName = fdp.ConsumeRandomLengthString(); + std::string extra = fdp.ConsumeRandomLengthString(); + std::string deviceId = fdp.ConsumeRandomLengthString(); + std::string udid = fdp.ConsumeRandomLengthString(); + std::string network = fdp.ConsumeRandomLengthString(); + int32_t authType = fdp.ConsumeIntegral(); int32_t level = fdp.ConsumeIntegral(); DeviceManagerService::GetInstance().Init(); DeviceManagerService::GetInstance().AuthenticateDevice(pkgName, authType, deviceId, extra); diff --git a/test/commonfuzztest/dmauthmanager_fuzzer/dm_auth_manager_fuzzer.cpp b/test/commonfuzztest/dmauthmanager_fuzzer/dm_auth_manager_fuzzer.cpp index 053f739b4..0ab530b0c 100644 --- a/test/commonfuzztest/dmauthmanager_fuzzer/dm_auth_manager_fuzzer.cpp +++ b/test/commonfuzztest/dmauthmanager_fuzzer/dm_auth_manager_fuzzer.cpp @@ -65,6 +65,7 @@ void DmAuthManagerFuzzTest(const uint8_t* data, size_t size) FuzzedDataProvider fdp(data, size); std::string str(reinterpret_cast(data), size); int32_t bindLevel = fdp.ConsumeIntegral(); + int32_t operationCode = fdp.ConsumeIntegral(); g_authManager->authMessageProcessor_ = std::make_shared(g_authManager); g_authManager->authMessageProcessor_->authResponseContext_ = std::make_shared(); g_authManager->authRequestContext_ = std::make_shared(); @@ -87,7 +88,7 @@ void DmAuthManagerFuzzTest(const uint8_t* data, size_t size) g_authManager->ShowStartAuthDialog(); g_authManager->OnDataReceived(g_sessionId, str); g_authManager->OnGroupCreated(g_requestId, str); - g_authManager->OnMemberJoin(g_requestId, g_status); + g_authManager->OnMemberJoin(g_requestId, g_status, operationCode); g_authManager->StartNegotiate(g_sessionId); g_authManager->RespNegotiate(g_sessionId); g_authManager->SendAuthRequest(g_sessionId); diff --git a/test/commonfuzztest/generateencrypteduuid_fuzzer/generate_encrypted_uuid_fuzzer.cpp b/test/commonfuzztest/generateencrypteduuid_fuzzer/generate_encrypted_uuid_fuzzer.cpp index a9010dd14..65dbf9c10 100644 --- a/test/commonfuzztest/generateencrypteduuid_fuzzer/generate_encrypted_uuid_fuzzer.cpp +++ b/test/commonfuzztest/generateencrypteduuid_fuzzer/generate_encrypted_uuid_fuzzer.cpp @@ -15,6 +15,7 @@ #include "generate_encrypted_uuid_fuzzer.h" +#include #include "device_manager_impl.h" namespace OHOS { @@ -25,11 +26,12 @@ void GenerateEncryptedUuidFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size == 0)) { return; } + FuzzedDataProvider fdp(data, size); + std::string pkgName = fdp.ConsumeRandomLengthString(); + std::string uuid = fdp.ConsumeRandomLengthString(); + std::string appId = fdp.ConsumeRandomLengthString(); + std::string encryptedUuid = fdp.ConsumeRandomLengthString(); - std::string pkgName(reinterpret_cast(data), size); - std::string uuid(reinterpret_cast(data), size); - std::string appId(reinterpret_cast(data), size); - std::string encryptedUuid(reinterpret_cast(data), size); DeviceManagerImpl::GetInstance().ipcClientProxy_ = std::make_shared(std::make_shared()); DeviceManagerImpl::GetInstance().GenerateEncryptedUuid(pkgName, uuid, appId, encryptedUuid); diff --git a/test/commonfuzztest/hichainconnector_fuzzer/hichain_connector_fuzzer.cpp b/test/commonfuzztest/hichainconnector_fuzzer/hichain_connector_fuzzer.cpp index dcc417f83..da7ec23e6 100644 --- a/test/commonfuzztest/hichainconnector_fuzzer/hichain_connector_fuzzer.cpp +++ b/test/commonfuzztest/hichainconnector_fuzzer/hichain_connector_fuzzer.cpp @@ -43,10 +43,11 @@ public: (void)requestId; (void)groupId; } - void OnMemberJoin(int64_t requestId, int32_t status) override + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) override { (void)requestId; (void)status; + (void)operationCode; } std::string GetConnectAddr(std::string deviceId) override { diff --git a/test/commonfuzztest/onerror_fuzzer/on_error_fuzzer.cpp b/test/commonfuzztest/onerror_fuzzer/on_error_fuzzer.cpp index 781698e0d..afc699f18 100644 --- a/test/commonfuzztest/onerror_fuzzer/on_error_fuzzer.cpp +++ b/test/commonfuzztest/onerror_fuzzer/on_error_fuzzer.cpp @@ -37,10 +37,11 @@ public: (void)requestId; (void)groupId; } - void OnMemberJoin(int64_t requestId, int32_t status) override + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) override { (void)requestId; (void)status; + (void)operationCode; } std::string GetConnectAddr(std::string deviceId) override { diff --git a/test/commonfuzztest/onfinish_fuzzer/on_finish_fuzzer.cpp b/test/commonfuzztest/onfinish_fuzzer/on_finish_fuzzer.cpp index 19b2b0ae5..f27b4ae57 100644 --- a/test/commonfuzztest/onfinish_fuzzer/on_finish_fuzzer.cpp +++ b/test/commonfuzztest/onfinish_fuzzer/on_finish_fuzzer.cpp @@ -37,10 +37,11 @@ public: (void)requestId; (void)groupId; } - void OnMemberJoin(int64_t requestId, int32_t status) override + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) override { (void)requestId; (void)status; + (void)operationCode; } std::string GetConnectAddr(std::string deviceId) override { diff --git a/test/commonfuzztest/onrequest_fuzzer/on_request_fuzzer.cpp b/test/commonfuzztest/onrequest_fuzzer/on_request_fuzzer.cpp index 4a9a99f96..7399f8507 100644 --- a/test/commonfuzztest/onrequest_fuzzer/on_request_fuzzer.cpp +++ b/test/commonfuzztest/onrequest_fuzzer/on_request_fuzzer.cpp @@ -36,10 +36,11 @@ public: (void)requestId; (void)groupId; } - void OnMemberJoin(int64_t requestId, int32_t status) override + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) override { (void)requestId; (void)status; + (void)operationCode; } std::string GetConnectAddr(std::string deviceId) override { diff --git a/test/commonfuzztest/pinauthui_fuzzer/pinauthui_fuzzer.cpp b/test/commonfuzztest/pinauthui_fuzzer/pinauthui_fuzzer.cpp index fe4db0874..548b93da0 100644 --- a/test/commonfuzztest/pinauthui_fuzzer/pinauthui_fuzzer.cpp +++ b/test/commonfuzztest/pinauthui_fuzzer/pinauthui_fuzzer.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include "pin_auth_ui.h" #include "dm_ability_manager.h" @@ -31,8 +31,8 @@ void PinAuthUiFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } - - int32_t pageId = *(reinterpret_cast(data)); + FuzzedDataProvider fdp(data, size); + int32_t pageId = fdp.ConsumeIntegral(); std::shared_ptr authManager = nullptr; std::shared_ptr pinauthui = std::make_shared(); pinauthui->ShowPinDialog(pageId, authManager); diff --git a/test/commonunittest/UTTest_dm_auth_manager_first.cpp b/test/commonunittest/UTTest_dm_auth_manager_first.cpp index 68638d2dd..deb454346 100644 --- a/test/commonunittest/UTTest_dm_auth_manager_first.cpp +++ b/test/commonunittest/UTTest_dm_auth_manager_first.cpp @@ -313,7 +313,7 @@ HWTEST_F(DmAuthManagerTest, JoinNetwork_001, testing::ext::TestSize.Level1) const std::string groupId = "{}"; int32_t status = 1; authManager_->OnGroupCreated(requestId, groupId); - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); authManager_->OnDataReceived(sessionId, message); authManager_->SetAuthRequestState(authRequestState); int32_t ret = authManager_->JoinNetwork(); @@ -380,7 +380,7 @@ HWTEST_F(DmAuthManagerTest, SetPageId_002, testing::ext::TestSize.Level1) int32_t status = 2; JsonObject jsonObject; jsonObject[TAG_MSG_TYPE] = MSG_TYPE_AUTH_BY_PIN; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); authManager_->OnDataReceived(sessionId, message); authManager_->authResponseContext_ = std::make_shared(); authManager_->authRequestState_ = std::make_shared(); diff --git a/test/commonunittest/UTTest_dm_auth_manager_second.cpp b/test/commonunittest/UTTest_dm_auth_manager_second.cpp index 7e654c117..46e18cbc8 100644 --- a/test/commonunittest/UTTest_dm_auth_manager_second.cpp +++ b/test/commonunittest/UTTest_dm_auth_manager_second.cpp @@ -174,7 +174,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_001, testing::ext::TestSize.Level1) int64_t requestId = 0; int32_t status = 11; authManager_->authResponseContext_ = nullptr; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -183,7 +183,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_002, testing::ext::TestSize.Level1) int64_t requestId = 0; int32_t status = 11; authManager_->authUiStateMgr_ = nullptr; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -194,7 +194,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_003, testing::ext::TestSize.Level1) authManager_->authRequestState_ = std::make_shared(); authManager_->authResponseState_ = nullptr; authManager_->authResponseContext_->authType = 5; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -206,7 +206,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_004, testing::ext::TestSize.Level1) authManager_->authResponseState_ = nullptr; authManager_->authResponseContext_->authType = 6; authManager_->authResponseContext_->requestId = 1; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -218,7 +218,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_006, testing::ext::TestSize.Level1) authManager_->authResponseState_ = nullptr; authManager_->authResponseContext_->authType = 6; authManager_->authResponseContext_->requestId = 0; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -230,7 +230,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_007, testing::ext::TestSize.Level1) authManager_->authResponseState_ = std::make_shared(); authManager_->authResponseContext_->authType = 6; authManager_->authResponseContext_->requestId = 0; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -240,7 +240,7 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_008, testing::ext::TestSize.Level1) int32_t status = 0; authManager_->authRequestState_ = nullptr; authManager_->authResponseState_ = nullptr; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_EQ(authManager_->isFinishOfLocal_, true); } @@ -257,17 +257,17 @@ HWTEST_F(DmAuthManagerTest, OnMemberJoin_009, testing::ext::TestSize.Level1) authManager_->authResponseState_ = authResponseInitStateMock; authManager_->authResponseContext_->isFinish = true; authManager_->authResponseContext_->requestId = 0; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_TRUE(authManager_->authResponseContext_->isFinish); authManager_->authResponseContext_->isFinish = true; authManager_->authResponseContext_->requestId = 1; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_FALSE(authManager_->authResponseContext_->isFinish); authManager_->authResponseContext_->isFinish = true; status = ERR_DM_FAILED; - authManager_->OnMemberJoin(requestId, status); + authManager_->OnMemberJoin(requestId, status, 0); ASSERT_FALSE(authManager_->authResponseContext_->isFinish); } diff --git a/test/commonunittest/UTTest_hichain_connector.cpp b/test/commonunittest/UTTest_hichain_connector.cpp index 9b4d5b0a4..e7088f210 100755 --- a/test/commonunittest/UTTest_hichain_connector.cpp +++ b/test/commonunittest/UTTest_hichain_connector.cpp @@ -52,10 +52,11 @@ public: (void)requestId; (void)groupId; } - void OnMemberJoin(int64_t requestId, int32_t status) override + void OnMemberJoin(int64_t requestId, int32_t status, int32_t operationCode) override { (void)requestId; (void)status; + (void)operationCode; } std::string GetConnectAddr(std::string deviceId) { diff --git a/test/commonunittest/UTTest_hichain_connector.h b/test/commonunittest/UTTest_hichain_connector.h index e41fe69b9..e94d2040a 100644 --- a/test/commonunittest/UTTest_hichain_connector.h +++ b/test/commonunittest/UTTest_hichain_connector.h @@ -48,7 +48,7 @@ public: MockIHiChainConnectorCallback() = default; virtual ~MockIHiChainConnectorCallback() = default; MOCK_METHOD(void, OnGroupCreated, (int64_t requestId, const std::string &groupId), (override)); - MOCK_METHOD(void, OnMemberJoin, (int64_t requestId, int32_t status), (override)); + MOCK_METHOD(void, OnMemberJoin, (int64_t requestId, int32_t status, int32_t operationCode), (override)); MOCK_METHOD(std::string, GetConnectAddr, (std::string deviceId), (override)); MOCK_METHOD(int32_t, GetPinCode, (std::string &code), (override)); }; diff --git a/test/servicesfuzztest/devicemanagernotify_fuzzer/device_manager_notify_fuzzer.cpp b/test/servicesfuzztest/devicemanagernotify_fuzzer/device_manager_notify_fuzzer.cpp index a2b74f3e5..742cd0da0 100644 --- a/test/servicesfuzztest/devicemanagernotify_fuzzer/device_manager_notify_fuzzer.cpp +++ b/test/servicesfuzztest/devicemanagernotify_fuzzer/device_manager_notify_fuzzer.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "ipc_client_manager.h" #include "ipc_set_useroperation_req.h" #include "ipc_rsp.h" @@ -92,13 +93,13 @@ void DeviceManagerNotifyDeviceStatusFuzzTest(const uint8_t* data, size_t size) void DeviceManagerNotifyOnPublishResultFuzzTest(const uint8_t* data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size < sizeof(int32_t) + sizeof(int32_t))) { return; } - + FuzzedDataProvider fdp(data, size); std::string pkgName(reinterpret_cast(data), size); - int32_t publishId = *(reinterpret_cast(data)); - int32_t publishResult = *(reinterpret_cast(data)); + int32_t publishId = fdp.ConsumeIntegral(); + int32_t publishResult = fdp.ConsumeIntegral(); DeviceManagerNotify::GetInstance().OnPublishResult(pkgName, publishId, publishResult); } diff --git a/test/servicesfuzztest/devicemanagerservice_fuzzer/BUILD.gn b/test/servicesfuzztest/devicemanagerservice_fuzzer/BUILD.gn index 21041b11a..3e52b87e5 100644 --- a/test/servicesfuzztest/devicemanagerservice_fuzzer/BUILD.gn +++ b/test/servicesfuzztest/devicemanagerservice_fuzzer/BUILD.gn @@ -58,6 +58,7 @@ ohos_fuzztest("DeviceManagerServiceFuzzTest") { sources = [ "device_manager_service_fuzzer.cpp" ] deps = [ + "${json_path}:devicemanagerjson", "${devicemanager_path}/services/service:devicemanagerservicetest", "${utils_path}:devicemanagerutilstest", ] diff --git a/test/servicesfuzztest/devicemanagerservice_fuzzer/device_manager_service_fuzzer.cpp b/test/servicesfuzztest/devicemanagerservice_fuzzer/device_manager_service_fuzzer.cpp index 749ed9e22..7d06b5973 100644 --- a/test/servicesfuzztest/devicemanagerservice_fuzzer/device_manager_service_fuzzer.cpp +++ b/test/servicesfuzztest/devicemanagerservice_fuzzer/device_manager_service_fuzzer.cpp @@ -15,6 +15,7 @@ #include #include +#include #include "device_manager_service.h" #include "device_manager_service_fuzzer.h" @@ -25,7 +26,8 @@ void DeviceManagerServiceFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } - int sessionId = *(reinterpret_cast(data)); + FuzzedDataProvider fdp(data, size); + int sessionId = fdp.ConsumeIntegral(); std::string inputStr(reinterpret_cast(data), size); std::string retStr; DmPinType pinType = DmPinType::QR_CODE; diff --git a/test/servicesfuzztest/devicenamemanager_fuzzer/BUILD.gn b/test/servicesfuzztest/devicenamemanager_fuzzer/BUILD.gn index a129f111d..2b6bc6841 100644 --- a/test/servicesfuzztest/devicenamemanager_fuzzer/BUILD.gn +++ b/test/servicesfuzztest/devicenamemanager_fuzzer/BUILD.gn @@ -62,7 +62,7 @@ ohos_fuzztest("DeviceNameManagerFuzzTest") { sources = [ "device_name_manager_fuzzer.cpp" ] deps = [ - "${devicemanager_path}/services/service:devicemanagerservice", + "${devicemanager_path}/services/service:devicemanagerservicetest", "${utils_path}:devicemanagerutilstest", ] diff --git a/test/servicesfuzztest/deviceprofileconnector_fuzzer/device_profile_connector_fuzzer.cpp b/test/servicesfuzztest/deviceprofileconnector_fuzzer/device_profile_connector_fuzzer.cpp index 5301a7178..1affa75ad 100644 --- a/test/servicesfuzztest/deviceprofileconnector_fuzzer/device_profile_connector_fuzzer.cpp +++ b/test/servicesfuzztest/deviceprofileconnector_fuzzer/device_profile_connector_fuzzer.cpp @@ -16,10 +16,10 @@ #include #include #include +#include #include "deviceprofile_connector.h" #include "device_profile_connector_fuzzer.h" -#include namespace OHOS { namespace DistributedHardware { diff --git a/test/servicesfuzztest/devicepublish_fuzzer/device_publish_fuzzer.cpp b/test/servicesfuzztest/devicepublish_fuzzer/device_publish_fuzzer.cpp index b8dbbd288..436a02414 100644 --- a/test/servicesfuzztest/devicepublish_fuzzer/device_publish_fuzzer.cpp +++ b/test/servicesfuzztest/devicepublish_fuzzer/device_publish_fuzzer.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "device_manager_impl.h" #include "device_manager.h" @@ -42,14 +43,20 @@ void DevicePublishFuzzTest(const uint8_t* data, size_t size) return; } std::string bundleName(reinterpret_cast(data), size); - + FuzzedDataProvider fdp(data, size); DmPublishInfo publishInfo; - publishInfo.publishId = *(reinterpret_cast(data)); - publishInfo.mode = *(reinterpret_cast(data)); - publishInfo.freq = *(reinterpret_cast(data)); - - int32_t publishId = *(reinterpret_cast(data)); - + publishInfo.publishId = fdp.ConsumeIntegral(); + publishInfo.mode = fdp.PickValueInArray({ + DM_DISCOVER_MODE_PASSIVE, + DM_DISCOVER_MODE_ACTIVE + }); + publishInfo.freq = fdp.PickValueInArray({ + DM_LOW, + DM_MID, + DM_HIGH, + DM_SUPER_HIGH + }); + int32_t publishId = fdp.ConsumeIntegral(); std::shared_ptr callback = std::make_shared(); DeviceManager::GetInstance().PublishDeviceDiscovery(bundleName, publishInfo, callback); usleep(SLEEP_TIME_US); diff --git a/test/servicesfuzztest/dmcommtool_fuzzer/BUILD.gn b/test/servicesfuzztest/dmcommtool_fuzzer/BUILD.gn index 996046c40..b1274cd93 100644 --- a/test/servicesfuzztest/dmcommtool_fuzzer/BUILD.gn +++ b/test/servicesfuzztest/dmcommtool_fuzzer/BUILD.gn @@ -62,6 +62,7 @@ ohos_fuzztest("DmCommToolFuzzTest") { sources = [ "dm_comm_tool_fuzzer.cpp" ] deps = [ + "${json_path}:devicemanagerjson", "${devicemanager_path}/services/service:devicemanagerservicetest", "${utils_path}:devicemanagerutilstest", ] diff --git a/test/servicesfuzztest/dmtransportmsg_fuzzer/BUILD.gn b/test/servicesfuzztest/dmtransportmsg_fuzzer/BUILD.gn index ae85c6248..56bf4b1e9 100644 --- a/test/servicesfuzztest/dmtransportmsg_fuzzer/BUILD.gn +++ b/test/servicesfuzztest/dmtransportmsg_fuzzer/BUILD.gn @@ -63,8 +63,8 @@ ohos_fuzztest("DmTransPortMsgFuzzTest") { sources = [ "dm_transport_msg_fuzzer.cpp" ] deps = [ - "${devicemanager_path}/services/service:devicemanagerservicetest", "${json_path}:devicemanagerjson", + "${devicemanager_path}/services/service:devicemanagerservicetest", "${utils_path}:devicemanagerutilstest", ] diff --git a/test/servicesfuzztest/getlocaldeviceinfo_fuzzer/get_local_device_info_fuzzer.cpp b/test/servicesfuzztest/getlocaldeviceinfo_fuzzer/get_local_device_info_fuzzer.cpp index 1501d1562..220a6b35d 100644 --- a/test/servicesfuzztest/getlocaldeviceinfo_fuzzer/get_local_device_info_fuzzer.cpp +++ b/test/servicesfuzztest/getlocaldeviceinfo_fuzzer/get_local_device_info_fuzzer.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include "get_local_device_info_fuzzer.h" #include "device_manager_impl.h" @@ -25,10 +25,10 @@ void GetLocalDeviceInfoFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } - + FuzzedDataProvider fdp(data, size); std::string pkgName(reinterpret_cast(data), size); std::string networkId(reinterpret_cast(data), size); - int32_t deviceTypeId = *(reinterpret_cast(data)); + int32_t deviceTypeId = fdp.ConsumeIntegral(); DeviceManagerImpl::GetInstance().GetLocalDeviceNetWorkId(pkgName, networkId); DeviceManagerImpl::GetInstance().GetLocalDeviceId(pkgName, networkId); DeviceManagerImpl::GetInstance().GetLocalDeviceType(pkgName, deviceTypeId); diff --git a/test/servicesfuzztest/ipcserverstub_fuzzer/BUILD.gn b/test/servicesfuzztest/ipcserverstub_fuzzer/BUILD.gn index a021875d7..f518c7969 100644 --- a/test/servicesfuzztest/ipcserverstub_fuzzer/BUILD.gn +++ b/test/servicesfuzztest/ipcserverstub_fuzzer/BUILD.gn @@ -69,10 +69,7 @@ ohos_fuzztest("IpcServerStubFuzzTest") { ] external_deps = [ - "ability_base:want", "c_utils:utils", - "data_share:datashare_common", - "data_share:datashare_consumer", "device_auth:deviceauth_sdk", "ipc:ipc_core", "ipc:ipc_single", diff --git a/test/servicesfuzztest/ipcserverstub_fuzzer/ipc_server_stub_fuzzer.cpp b/test/servicesfuzztest/ipcserverstub_fuzzer/ipc_server_stub_fuzzer.cpp index 1a75d5056..7602088be 100644 --- a/test/servicesfuzztest/ipcserverstub_fuzzer/ipc_server_stub_fuzzer.cpp +++ b/test/servicesfuzztest/ipcserverstub_fuzzer/ipc_server_stub_fuzzer.cpp @@ -16,7 +16,7 @@ #include #include #include - +#include #include "ipc_client_stub.h" #include "dm_device_info.h" #include "ipc_server_stub.h" @@ -40,7 +40,8 @@ void IpcServerStubFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(uint32_t))) { return; } - uint32_t code = *(reinterpret_cast(data)); + FuzzedDataProvider fdp(data, size); + uint32_t code = fdp.ConsumeIntegral(); MessageParcel data1; MessageParcel reply; MessageOption option; diff --git a/test/servicesfuzztest/notifyevent_fuzzer/notify_event_fuzzer.cpp b/test/servicesfuzztest/notifyevent_fuzzer/notify_event_fuzzer.cpp index 5af41d034..e15be92f6 100644 --- a/test/servicesfuzztest/notifyevent_fuzzer/notify_event_fuzzer.cpp +++ b/test/servicesfuzztest/notifyevent_fuzzer/notify_event_fuzzer.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include "notify_event_fuzzer.h" #include "device_manager_impl.h" @@ -25,9 +25,9 @@ void NotifyEventFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } - + FuzzedDataProvider fdp(data, size); std::string pkgName(reinterpret_cast(data), size); - int32_t eventId = *(reinterpret_cast(data)); + int32_t eventId = fdp.ConsumeIntegral(); std::string event(reinterpret_cast(data), size); DeviceManagerImpl::GetInstance().NotifyEvent(pkgName, eventId, event); } diff --git a/test/servicesfuzztest/setuseroperation_fuzzer/set_user_operation_fuzzer.cpp b/test/servicesfuzztest/setuseroperation_fuzzer/set_user_operation_fuzzer.cpp index 10653fe19..3e1fc70ea 100644 --- a/test/servicesfuzztest/setuseroperation_fuzzer/set_user_operation_fuzzer.cpp +++ b/test/servicesfuzztest/setuseroperation_fuzzer/set_user_operation_fuzzer.cpp @@ -16,7 +16,7 @@ #include #include #include - +#include #include "device_manager_impl.h" #include "device_manager.h" #include "device_manager_callback.h" @@ -29,8 +29,9 @@ void SetUserOperationFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } + FuzzedDataProvider fdp(data, size); std::string pkgName(reinterpret_cast(data), size); - int32_t action = *(reinterpret_cast(data)); + int32_t action = fdp.ConsumeIntegral(); const std::string params = "extra"; if (pkgName.empty()) { diff --git a/test/softbusfuzztest/onsessionopened_fuzzer/on_session_opened_fuzzer.cpp b/test/softbusfuzztest/onsessionopened_fuzzer/on_session_opened_fuzzer.cpp index 1caed0d58..9b3835daf 100644 --- a/test/softbusfuzztest/onsessionopened_fuzzer/on_session_opened_fuzzer.cpp +++ b/test/softbusfuzztest/onsessionopened_fuzzer/on_session_opened_fuzzer.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include "device_manager_service_listener.h" #include "dm_auth_manager.h" #include "dm_device_info.h" @@ -59,12 +59,12 @@ public: void OnSessionOpenedFuzzTest(const uint8_t* data, size_t size) { - if ((data == nullptr) || (size < sizeof(int))) { + if ((data == nullptr) || (size < sizeof(int) + sizeof(int))) { return; } - - int sessionId = *(reinterpret_cast(data)); - int result = *(reinterpret_cast(data)); + FuzzedDataProvider fdp(data, size); + int sessionId = fdp.ConsumeIntegral(); + int result = fdp.ConsumeIntegral(); std::shared_ptr softbusSession = std::make_shared(); softbusSession->RegisterSessionCallback(std::make_shared()); diff --git a/test/softbusfuzztest/publishsoftbuslnn_fuzzer/publish_softbus_lnn_fuzzer.cpp b/test/softbusfuzztest/publishsoftbuslnn_fuzzer/publish_softbus_lnn_fuzzer.cpp index 3f6e7c97a..77dbbd86b 100644 --- a/test/softbusfuzztest/publishsoftbuslnn_fuzzer/publish_softbus_lnn_fuzzer.cpp +++ b/test/softbusfuzztest/publishsoftbuslnn_fuzzer/publish_softbus_lnn_fuzzer.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "device_manager_impl.h" #include "dm_constants.h" @@ -29,7 +30,9 @@ void PublishSoftbusLNNFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } + FuzzedDataProvider fdp(data, size); DmPublishInfo dmPublishInfo; + dmPublishInfo.publishId = fdp.ConsumeIntegral(); dmPublishInfo.publishId = *(reinterpret_cast(data)); std::string capability(reinterpret_cast(data), size); std::string customData(reinterpret_cast(data), size); diff --git a/test/softbusfuzztest/softbusconnector_fuzzer/softbus_connector_fuzzer.cpp b/test/softbusfuzztest/softbusconnector_fuzzer/softbus_connector_fuzzer.cpp index 42008ec69..ccfb389ff 100644 --- a/test/softbusfuzztest/softbusconnector_fuzzer/softbus_connector_fuzzer.cpp +++ b/test/softbusfuzztest/softbusconnector_fuzzer/softbus_connector_fuzzer.cpp @@ -29,13 +29,13 @@ namespace DistributedHardware { void SoftBusConnectorFuzzTest(const uint8_t* data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size < sizeof(int32_t) + sizeof(int) + sizeof(int32_t))) { return; } - + FuzzedDataProvider fdp(data, size); ConnectionAddr *addr = nullptr; const char *networkId = reinterpret_cast(data); - int32_t result = *(reinterpret_cast(data)); + int32_t result = fdp.ConsumeIntegral(); std::shared_ptr softbusConnector = std::make_shared(); softbusConnector->OnSoftbusJoinLNNResult(addr, networkId, result); } diff --git a/test/softbusfuzztest/softbusconnectorpublish_fuzzer/softbus_connector_publish_fuzzer.cpp b/test/softbusfuzztest/softbusconnectorpublish_fuzzer/softbus_connector_publish_fuzzer.cpp index d3bfb3b74..ab4791a52 100644 --- a/test/softbusfuzztest/softbusconnectorpublish_fuzzer/softbus_connector_publish_fuzzer.cpp +++ b/test/softbusfuzztest/softbusconnectorpublish_fuzzer/softbus_connector_publish_fuzzer.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ #include +#include #include "softbus_connector.h" #include "softbus_bus_center.h" @@ -26,7 +27,7 @@ namespace OHOS { namespace DistributedHardware { void SoftBusConnectorPublishFuzzTest(const uint8_t* data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size < sizeof(int32_t) + sizeof(uint16_t))) { return; } diff --git a/test/softbusfuzztest/softbusconnectorstate_fuzzer/softbus_connector_state_fuzzer.cpp b/test/softbusfuzztest/softbusconnectorstate_fuzzer/softbus_connector_state_fuzzer.cpp index d942864c5..1ea734738 100644 --- a/test/softbusfuzztest/softbusconnectorstate_fuzzer/softbus_connector_state_fuzzer.cpp +++ b/test/softbusfuzztest/softbusconnectorstate_fuzzer/softbus_connector_state_fuzzer.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include "softbus_connector.h" #include "softbus_bus_center.h" #include "dm_device_info.h" @@ -39,8 +39,9 @@ void SoftBusConnectorStateFuzzTest(const uint8_t* data, size_t size) return; } + FuzzedDataProvider fdp(data, size); std::string str(reinterpret_cast(data), size); - int32_t authForm = *(reinterpret_cast(data)); + int32_t authForm = fdp.ConsumeIntegral(); std::shared_ptr softbusConnector = std::make_shared(); std::shared_ptr callback = std::make_shared(); diff --git a/test/softbusfuzztest/softbuslistener_fuzzer/softbus_listener_fuzzer.cpp b/test/softbusfuzztest/softbuslistener_fuzzer/softbus_listener_fuzzer.cpp index d44b25b5f..8fae59d8e 100644 --- a/test/softbusfuzztest/softbuslistener_fuzzer/softbus_listener_fuzzer.cpp +++ b/test/softbusfuzztest/softbuslistener_fuzzer/softbus_listener_fuzzer.cpp @@ -265,9 +265,6 @@ void SoftBusListenerForthFuzzTest(const uint8_t* data, size_t size) if ((data == nullptr) || (size < sizeof(int32_t))) { return; } - std::string udidHash(reinterpret_cast(data), size); - std::string udid(reinterpret_cast(data), size); - softbusListener_->GetUdidFromDp(udidHash, udid); NodeBasicInfo nodeBasicInfo = { .networkId = {"networkId"}, .deviceName = {"deviceNameInfo"}, @@ -276,6 +273,7 @@ void SoftBusListenerForthFuzzTest(const uint8_t* data, size_t size) .osVersion = {1} }; softbusListener_->OnSoftbusDeviceOffline(&nodeBasicInfo); + DistributedDeviceProfile::AccessControlProfile profile; DmDeviceInfo deviceInfo; softbusListener_->ConvertAclToDeviceInfo(profile, deviceInfo); diff --git a/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/softbus_listener_get_local_deviceinfo_fuzzer.cpp b/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/softbus_listener_get_local_deviceinfo_fuzzer.cpp index 6f6982962..0f5a19be4 100644 --- a/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/softbus_listener_get_local_deviceinfo_fuzzer.cpp +++ b/test/softbusfuzztest/softbuslistenergetlocaldeviceinfo_fuzzer/softbus_listener_get_local_deviceinfo_fuzzer.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "device_manager_impl.h" #include "dm_constants.h" @@ -26,12 +27,12 @@ namespace OHOS { namespace DistributedHardware { void GetLocalDeviceInfoFuzzTest(const uint8_t* data, size_t size) { - if ((data == nullptr) || (size < sizeof(int32_t))) { + if ((data == nullptr) || (size < sizeof(int32_t) + sizeof(int))) { return; } - - int32_t subscribeId = *(reinterpret_cast(data)); - int publishId = *(reinterpret_cast(data)); + FuzzedDataProvider fdp(data, size); + int32_t subscribeId = fdp.ConsumeIntegral(); + int publishId = fdp.ConsumeIntegral(); PublishResult pResult = (PublishResult)1; RefreshResult rResult = (RefreshResult)1; DmDeviceInfo deviceInfo; diff --git a/utils/src/crypto/dm_crypto.cpp b/utils/src/crypto/dm_crypto.cpp index 412276882..1b12e83ae 100644 --- a/utils/src/crypto/dm_crypto.cpp +++ b/utils/src/crypto/dm_crypto.cpp @@ -153,13 +153,16 @@ DM_EXPORT std::string Crypto::GetTokenIdHash(const std::string &tokenId) DM_EXPORT int32_t Crypto::ConvertHexStringToBytes(unsigned char *outBuf, uint32_t outBufLen, const char *inBuf, uint32_t inLen) { - (void)outBufLen; if ((outBuf == NULL) || (inBuf == NULL) || (inLen % HEX_TO_UINT8 != 0)) { LOGE("invalid param"); return ERR_DM_FAILED; } uint32_t outLen = inLen / HEX_TO_UINT8; + if (outBufLen < outLen) { + LOGE("out of memory."); + return ERR_DM_FAILED; + } uint32_t i = 0; while (i < outLen) { unsigned char c = *inBuf++; -- Gitee