• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }