1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "inputmethodability_fuzzer.h"
17
18 #include <utility>
19
20 #include "input_method_ability.h"
21 #include "input_method_engine_listener_impl.h"
22
23 using namespace OHOS::MiscServices;
24 namespace OHOS {
25 class KeyboardListenerImpl : public KeyboardListener {
OnKeyEvent(int32_t keyCode,int32_t keyStatus)26 bool OnKeyEvent(int32_t keyCode, int32_t keyStatus)
27 {
28 return true;
29 }
OnKeyEvent(const std::shared_ptr<MMI::KeyEvent> & keyEvent)30 bool OnKeyEvent(const std::shared_ptr<MMI::KeyEvent> &keyEvent)
31 {
32 return true;
33 }
OnCursorUpdate(int32_t positionX,int32_t positionY,int32_t height)34 void OnCursorUpdate(int32_t positionX, int32_t positionY, int32_t height) {}
OnSelectionChange(int32_t oldBegin,int32_t oldEnd,int32_t newBegin,int32_t newEnd)35 void OnSelectionChange(int32_t oldBegin, int32_t oldEnd, int32_t newBegin, int32_t newEnd) {}
OnTextChange(const std::string & text)36 void OnTextChange(const std::string &text) {}
OnEditorAttributeChange(const InputAttribute & inputAttribute)37 void OnEditorAttributeChange(const InputAttribute &inputAttribute) {}
38 };
39
TestInsertText(std::string fuzzedString)40 void TestInsertText(std::string fuzzedString)
41 {
42 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
43 ability->InsertText(std::move(fuzzedString));
44 }
45
TestSetImeListener()46 void TestSetImeListener()
47 {
48 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
49 auto engineListener = std::make_shared<InputMethodEngineListenerImpl>();
50 ability->SetImeListener(engineListener);
51 }
52
TestSetKdListener()53 void TestSetKdListener()
54 {
55 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
56 auto keyBoardListener = std::make_shared<KeyboardListenerImpl>();
57 ability->SetKdListener(keyBoardListener);
58 }
59
TestDeleteForward(int32_t fuzzedInt32)60 void TestDeleteForward(int32_t fuzzedInt32)
61 {
62 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
63 ability->DeleteForward(fuzzedInt32);
64 }
65
TestDeleteBackward(int32_t fuzzedInt32)66 void TestDeleteBackward(int32_t fuzzedInt32)
67 {
68 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
69 ability->DeleteBackward(fuzzedInt32);
70 }
71
TestSendExtendAction(int32_t fuzzedInt32)72 void TestSendExtendAction(int32_t fuzzedInt32)
73 {
74 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
75 ability->SendExtendAction(fuzzedInt32);
76 }
77
TestHideKeyboardSelf()78 void TestHideKeyboardSelf()
79 {
80 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
81 ability->HideKeyboardSelf();
82 }
83
TestGetTextBeforeCursor(int32_t fuzzedInt32)84 void TestGetTextBeforeCursor(int32_t fuzzedInt32)
85 {
86 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
87 std::u16string text;
88 ability->GetTextBeforeCursor(fuzzedInt32, text);
89 }
90
TestGetTextAfterCursor(int32_t fuzzedInt32)91 void TestGetTextAfterCursor(int32_t fuzzedInt32)
92 {
93 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
94 std::u16string text;
95 ability->GetTextAfterCursor(fuzzedInt32, text);
96 }
97
TestSendFunctionKey(int32_t fuzzedInt32)98 void TestSendFunctionKey(int32_t fuzzedInt32)
99 {
100 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
101 ability->SendFunctionKey(fuzzedInt32);
102 }
103
TestMoveCursor(int32_t fuzzedInt32)104 void TestMoveCursor(int32_t fuzzedInt32)
105 {
106 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
107 ability->MoveCursor(fuzzedInt32);
108 }
109
TestDispatchKeyEvent(int32_t fuzzedInt32)110 void TestDispatchKeyEvent(int32_t fuzzedInt32)
111 {
112 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
113 std::shared_ptr<MMI::KeyEvent> keyEvent = MMI::KeyEvent::Create();
114 keyEvent->SetKeyCode(fuzzedInt32);
115 keyEvent->SetKeyAction(fuzzedInt32);
116 ability->DispatchKeyEvent(keyEvent);
117 }
118
TestSetCallingWindow(int32_t fuzzedInt32)119 void TestSetCallingWindow(int32_t fuzzedInt32)
120 {
121 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
122 ability->SetCallingWindow(fuzzedInt32);
123 }
124
TestGetEnterKeyType()125 void TestGetEnterKeyType()
126 {
127 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
128 int32_t keyType;
129 ability->GetEnterKeyType(keyType);
130 }
131
TestGetInputPattern()132 void TestGetInputPattern()
133 {
134 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
135 int32_t inputPattern;
136 ability->GetInputPattern(inputPattern);
137 }
138 } // namespace OHOS
139
140 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)141 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
142 {
143 /* Run your code on data */
144 std::string fuzzedString(reinterpret_cast<const char *>(data), size);
145 auto fuzzedInt32 = static_cast<int32_t>(size);
146
147 OHOS::TestInsertText(fuzzedString);
148
149 OHOS::TestSetImeListener();
150
151 OHOS::TestSetKdListener();
152
153 OHOS::TestDeleteForward(fuzzedInt32);
154 OHOS::TestDeleteBackward(fuzzedInt32);
155 OHOS::TestSendExtendAction(fuzzedInt32);
156
157 OHOS::TestHideKeyboardSelf();
158
159 OHOS::TestGetTextBeforeCursor(fuzzedInt32);
160 OHOS::TestGetTextAfterCursor(fuzzedInt32);
161
162 OHOS::TestSendFunctionKey(fuzzedInt32);
163 OHOS::TestMoveCursor(fuzzedInt32);
164
165 OHOS::TestDispatchKeyEvent(fuzzedInt32);
166
167 OHOS::TestSetCallingWindow(fuzzedInt32);
168
169 OHOS::TestGetEnterKeyType();
170 OHOS::TestGetInputPattern();
171 return 0;
172 }