From 3f6ab2edd1abff14b2890e13cbcc2dfd8c608f37 Mon Sep 17 00:00:00 2001 From: qianyong325 Date: Mon, 28 Apr 2025 19:04:44 +0800 Subject: [PATCH] fix fuzz Signed-off-by: qianyong325 --- .../systemabilitystubfuzztest/BUILD.gn | 1 + .../common/imf_sa_stub_fuzz_util.cpp | 53 +++++++++++++++++++ .../common/imf_sa_stub_fuzz_util.h | 1 + 3 files changed, 55 insertions(+) diff --git a/test/fuzztest/systemabilitystubfuzztest/BUILD.gn b/test/fuzztest/systemabilitystubfuzztest/BUILD.gn index d211d4b21..2808cf338 100644 --- a/test/fuzztest/systemabilitystubfuzztest/BUILD.gn +++ b/test/fuzztest/systemabilitystubfuzztest/BUILD.gn @@ -68,6 +68,7 @@ common_external_deps = [ ] common_deps = [ + "${inputmethod_path}/interfaces/inner_api/inputmethod_ability:inputmethod_ability_static", "${inputmethod_path}/services:inputmethod_service_static", "${inputmethod_path}/services/adapter/settings_data_provider:settings_data_static", "${inputmethod_path}/test/fuzztest/systemabilitystubfuzztest/common:imf_sa_stub_fuzztest_common_static", diff --git a/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.cpp b/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.cpp index c66843eb4..8c860b67b 100644 --- a/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.cpp +++ b/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.cpp @@ -24,6 +24,9 @@ #include "system_ability_definition.h" #include "text_listener.h" #include "token_setproc.h" +#include "input_client_service_impl.h" +#include "input_method_agent_service_impl.h" +#include "input_method_core_service_impl.h" namespace OHOS { namespace MiscServices { @@ -56,6 +59,52 @@ void ImfSaStubFuzzUtil::GrantNativePermission() delete[] perms; } +bool ImfSaStubFuzzUtil::SwitchIpcCode(IInputMethodSystemAbilityIpcCode code, MessageParcel &datas) +{ + switch (code) { + case IInputMethodSystemAbilityIpcCode::COMMAND_START_INPUT: { + InputClientInfoInner clientInfoInner = {}; + if (!datas.WriteParcelable(&clientInfoInner)) { + return false; + } + } + case IInputMethodSystemAbilityIpcCode::COMMAND_SHOW_INPUT: { + sptr client = new (std::nothrow) InputClientServiceImpl(); + if (client == nullptr || !datas.WriteRemoteObject(client->AsObject())) { + return false; + } + } + case IInputMethodSystemAbilityIpcCode::COMMAND_SET_CORE_AND_AGENT: { + sptr core = new InputMethodCoreServiceImpl(); + sptr agent = new (std::nothrow) InputMethodAgentServiceImpl(); + if (core == nullptr || agent == nullptr || !datas.WriteRemoteObject(core->AsObject()) + || !datas.WriteRemoteObject(agent->AsObject())) { + return false; + } + } + case IInputMethodSystemAbilityIpcCode::COMMAND_UN_REGISTERED_PROXY_IME: { + sptr core = new InputMethodCoreServiceImpl(); + if (core == nullptr || !datas.WriteRemoteObject(core->AsObject())) { + return false; + } + } + case IInputMethodSystemAbilityIpcCode::COMMAND_RELEASE_INPUT: { + sptr client = new (std::nothrow) InputClientServiceImpl(); + if (client == nullptr || !datas.WriteRemoteObject(client->AsObject())) { + return false; + } + } + case IInputMethodSystemAbilityIpcCode::COMMAND_HIDE_INPUT: { + sptr client = new (std::nothrow) InputClientServiceImpl(); + if (client == nullptr || !datas.WriteRemoteObject(client->AsObject())) { + return false; + } + } + default: + return true; + } +} + bool ImfSaStubFuzzUtil::FuzzInputMethodSystemAbility(const uint8_t *rawData, size_t size, IInputMethodSystemAbilityIpcCode code) { @@ -68,6 +117,10 @@ bool ImfSaStubFuzzUtil::FuzzInputMethodSystemAbility(const uint8_t *rawData, siz datas.WriteInterfaceToken(SYSTEMABILITY_INTERFACE_TOKEN); datas.WriteBuffer(rawData, size); datas.RewindRead(0); + auto ret = SwitchIpcCode(code, datas); + if (ret == false) { + return ret; + } MessageParcel reply; MessageOption option; DelayedSingleton::GetInstance()->OnRemoteRequest( diff --git a/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.h b/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.h index 8a33d45f8..d35504b7b 100644 --- a/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.h +++ b/test/fuzztest/systemabilitystubfuzztest/common/imf_sa_stub_fuzz_util.h @@ -38,6 +38,7 @@ private: static void InitKeyboardDelegate(); static void Initialize(); static void GrantNativePermission(); + static bool SwitchIpcCode(IInputMethodSystemAbilityIpcCode code, MessageParcel &datas); static bool isInitialize_; static std::mutex initMutex_; }; -- Gitee