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,sptr<KeyEventConsumerProxy> & consumer)26 bool OnKeyEvent(int32_t keyCode, int32_t keyStatus, sptr<KeyEventConsumerProxy> &consumer)
27 {
28 return true;
29 }
OnKeyEvent(const std::shared_ptr<MMI::KeyEvent> & keyEvent,sptr<KeyEventConsumerProxy> & consumer)30 bool OnKeyEvent(const std::shared_ptr<MMI::KeyEvent> &keyEvent, sptr<KeyEventConsumerProxy> &consumer)
31 {
32 return true;
33 }
OnDealKeyEvent(const std::shared_ptr<MMI::KeyEvent> & keyEvent,sptr<KeyEventConsumerProxy> & consumer)34 bool OnDealKeyEvent(const std::shared_ptr<MMI::KeyEvent> &keyEvent, sptr<KeyEventConsumerProxy> &consumer)
35 {
36 return true;
37 }
OnCursorUpdate(int32_t positionX,int32_t positionY,int32_t height)38 void OnCursorUpdate(int32_t positionX, int32_t positionY, int32_t height)
39 {
40 }
OnSelectionChange(int32_t oldBegin,int32_t oldEnd,int32_t newBegin,int32_t newEnd)41 void OnSelectionChange(int32_t oldBegin, int32_t oldEnd, int32_t newBegin, int32_t newEnd)
42 {
43 }
OnTextChange(const std::string & text)44 void OnTextChange(const std::string &text)
45 {
46 }
OnEditorAttributeChange(const InputAttribute & inputAttribute)47 void OnEditorAttributeChange(const InputAttribute &inputAttribute)
48 {
49 }
50 };
51
TestInsertText(const std::string & fuzzedString)52 void TestInsertText(const std::string &fuzzedString)
53 {
54 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
55 ability->InsertText(std::move(fuzzedString));
56 }
57
TestSetImeListener()58 void TestSetImeListener()
59 {
60 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
61 auto engineListener = std::make_shared<InputMethodEngineListenerImpl>();
62 ability->SetImeListener(engineListener);
63 }
64
TestSetKdListener()65 void TestSetKdListener()
66 {
67 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
68 ability->SetKdListener(nullptr);
69 }
70
TestDeleteForward(int32_t fuzzedInt32)71 void TestDeleteForward(int32_t fuzzedInt32)
72 {
73 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
74 ability->DeleteForward(fuzzedInt32);
75 }
76
TestDeleteBackward(int32_t fuzzedInt32)77 void TestDeleteBackward(int32_t fuzzedInt32)
78 {
79 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
80 ability->DeleteBackward(fuzzedInt32);
81 }
82
TestSendExtendAction(int32_t fuzzedInt32)83 void TestSendExtendAction(int32_t fuzzedInt32)
84 {
85 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
86 ability->SendExtendAction(fuzzedInt32);
87 }
88
TestHideKeyboardSelf()89 void TestHideKeyboardSelf()
90 {
91 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
92 ability->HideKeyboardSelf();
93 }
94
TestGetTextBeforeCursor(int32_t fuzzedInt32)95 void TestGetTextBeforeCursor(int32_t fuzzedInt32)
96 {
97 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
98 std::u16string text;
99 ability->GetTextBeforeCursor(fuzzedInt32, text);
100 }
101
TestGetTextAfterCursor(int32_t fuzzedInt32)102 void TestGetTextAfterCursor(int32_t fuzzedInt32)
103 {
104 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
105 std::u16string text;
106 ability->GetTextAfterCursor(fuzzedInt32, text);
107 }
108
TestSendFunctionKey(int32_t fuzzedInt32)109 void TestSendFunctionKey(int32_t fuzzedInt32)
110 {
111 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
112 ability->SendFunctionKey(fuzzedInt32);
113 }
114
TestMoveCursor(int32_t fuzzedInt32)115 void TestMoveCursor(int32_t fuzzedInt32)
116 {
117 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
118 ability->MoveCursor(fuzzedInt32);
119 }
120
TestDispatchKeyEvent(int32_t fuzzedInt32)121 void TestDispatchKeyEvent(int32_t fuzzedInt32)
122 {
123 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
124 std::shared_ptr<MMI::KeyEvent> keyEvent = MMI::KeyEvent::Create();
125 keyEvent->SetKeyCode(fuzzedInt32);
126 keyEvent->SetKeyAction(fuzzedInt32);
127 sptr<KeyEventConsumerProxy> consumer = new (std::nothrow) KeyEventConsumerProxy(nullptr);
128 ability->DispatchKeyEvent(keyEvent, consumer);
129 }
130
TestSetCallingWindow(int32_t fuzzedInt32)131 void TestSetCallingWindow(int32_t fuzzedInt32)
132 {
133 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
134 ability->SetCallingWindow(fuzzedInt32);
135 }
136
TestGetEnterKeyType()137 void TestGetEnterKeyType()
138 {
139 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
140 int32_t keyType;
141 ability->GetEnterKeyType(keyType);
142 }
143
TestGetInputPattern()144 void TestGetInputPattern()
145 {
146 sptr<InputMethodAbility> ability = InputMethodAbility::GetInstance();
147 int32_t inputPattern;
148 ability->GetInputPattern(inputPattern);
149 }
150 } // namespace OHOS
151
152 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)153 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
154 {
155 /* Run your code on data */
156 std::string fuzzedString(reinterpret_cast<const char *>(data), size);
157 auto fuzzedInt32 = static_cast<int32_t>(size);
158
159 OHOS::TestInsertText(fuzzedString);
160
161 OHOS::TestSetImeListener();
162
163 OHOS::TestSetKdListener();
164
165 OHOS::TestDeleteForward(fuzzedInt32);
166 OHOS::TestDeleteBackward(fuzzedInt32);
167 OHOS::TestSendExtendAction(fuzzedInt32);
168
169 OHOS::TestHideKeyboardSelf();
170
171 OHOS::TestGetTextBeforeCursor(fuzzedInt32);
172 OHOS::TestGetTextAfterCursor(fuzzedInt32);
173
174 OHOS::TestSendFunctionKey(fuzzedInt32);
175 OHOS::TestMoveCursor(fuzzedInt32);
176
177 OHOS::TestDispatchKeyEvent(fuzzedInt32);
178
179 OHOS::TestSetCallingWindow(fuzzedInt32);
180
181 OHOS::TestGetEnterKeyType();
182 OHOS::TestGetInputPattern();
183 return 0;
184 }