diff --git a/test/fuzztest/systemabilitystubfuzztest/BUILD.gn b/test/fuzztest/systemabilitystubfuzztest/BUILD.gn index d211d4b21f2b419bd8bd77291fca3bcc0e1940e5..2808cf3382f00c30b0ab754d8673a95534c46b98 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 c66843eb4f26a4acae80fe03f4ceef83684dc656..8c860b67b91f281a09656cccb711212b2f6d5c30 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 8a33d45f8708fe6956b5907457dda0c896377e84..d35504b7becfa1fb45c6cd1253d601519b1fb081 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_; };