1 /*
2 * Copyright (c) 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 "setmousescrollrows_fuzzer.h"
17
18 #include "securec.h"
19
20 #include "input_manager.h"
21 #include "mmi_log.h"
22
23 #undef MMI_LOG_TAG
24 #define MMI_LOG_TAG "SetMouseScrollRowsFuzzTest"
25
26 namespace OHOS {
27 namespace MMI {
28 template<class T>
GetObject(T & object,const uint8_t * data,size_t size)29 size_t GetObject(T &object, const uint8_t *data, size_t size)
30 {
31 size_t objectSize = sizeof(object);
32 if (objectSize > size) {
33 return 0;
34 }
35 errno_t ret = memcpy_s(&object, objectSize, data, objectSize);
36 if (ret != EOK) {
37 return 0;
38 }
39 return objectSize;
40 }
41
SetMouseScrollRowsFuzzTest(const uint8_t * data,size_t size)42 void SetMouseScrollRowsFuzzTest(const uint8_t* data, size_t size)
43 {
44 size_t startPos = 0;
45 int32_t rowsBefore;
46 int32_t rowsAfter;
47 startPos += GetObject<int32_t>(rowsBefore, data + startPos, size - startPos);
48 MMI_HILOGD("SetMouseScrollRows start");
49 InputManager::GetInstance()->SetMouseScrollRows(rowsBefore);
50 InputManager::GetInstance()->GetMouseScrollRows(rowsAfter);
51 }
52
SetPointerSizeFuzzTest(const uint8_t * data,size_t size)53 void SetPointerSizeFuzzTest(const uint8_t* data, size_t size)
54 {
55 size_t startPos = 0;
56 int32_t pointerSizeBefore;
57 int32_t pointerSizeAfter;
58 startPos += GetObject<int32_t>(pointerSizeBefore, data + startPos, size - startPos);
59 InputManager::GetInstance()->SetPointerSize(pointerSizeBefore);
60 InputManager::GetInstance()->GetPointerSize(pointerSizeAfter);
61 }
62
GetAllMmiSubscribedEventsFuzzTest(const uint8_t * data,size_t size)63 void GetAllMmiSubscribedEventsFuzzTest(const uint8_t* data, size_t size)
64 {
65 std::map<std::tuple<int32_t, int32_t, std::string>, int32_t> map;
66 MMI_HILOGD("GetAllMmiSubscribedEventsFuzzTest start");
67 InputManager::GetInstance()->GetAllMmiSubscribedEvents(map);
68 }
69
SetNapStatusFuzzTest(const uint8_t * data,size_t size)70 void SetNapStatusFuzzTest(const uint8_t* data, size_t size)
71 {
72 int32_t pid = 10;
73 int32_t uid = 20;
74 std::string bundleName = "name";
75 int32_t state = 2;
76 InputManager::GetInstance()->SetNapStatus(pid, uid, bundleName, state);
77 }
78
SetHoverScrollStateFuzzTest(const uint8_t * data,size_t size)79 void SetHoverScrollStateFuzzTest(const uint8_t* data, size_t size)
80 {
81 bool isHoverState = true;
82 InputManager::GetInstance()->SetHoverScrollState(isHoverState);
83 bool notHoverState = false;
84 InputManager::GetInstance()->SetHoverScrollState(notHoverState);
85 bool getHoverState = true;
86 InputManager::GetInstance()->GetHoverScrollState(getHoverState);
87 }
88
PointerColorFuzzTest(const uint8_t * data,size_t size)89 void PointerColorFuzzTest(const uint8_t* data, size_t size)
90 {
91 int32_t firstColor = 0xA946F1;
92 InputManager::GetInstance()->SetPointerColor(firstColor);
93 int32_t getColor = 3;
94 InputManager::GetInstance()->GetPointerColor(getColor);
95 }
96
ClearWindowPointerStyleFuzzTest(const uint8_t * data,size_t size)97 void ClearWindowPointerStyleFuzzTest(const uint8_t* data, size_t size)
98 {
99 int32_t pid = 0;
100 int32_t uid = 0;
101 InputManager::GetInstance()->ClearWindowPointerStyle(pid, uid);
102 }
103
SetKeyboardRepeatDelayFuzzTest(const uint8_t * data,size_t size)104 void SetKeyboardRepeatDelayFuzzTest(const uint8_t* data, size_t size)
105 {
106 int32_t delayTime = 10;
107 InputManager::GetInstance()->SetKeyboardRepeatDelay(delayTime);
108 }
109 } // MMI
110 } // OHOS
111
112 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)113 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
114 {
115 /* Run your code on data */
116 OHOS::MMI::SetMouseScrollRowsFuzzTest(data, size);
117 OHOS::MMI::SetPointerSizeFuzzTest(data, size);
118 OHOS::MMI::GetAllMmiSubscribedEventsFuzzTest(data, size);
119 OHOS::MMI::SetNapStatusFuzzTest(data, size);
120 OHOS::MMI::SetHoverScrollStateFuzzTest(data, size);
121 OHOS::MMI::PointerColorFuzzTest(data, size);
122 OHOS::MMI::ClearWindowPointerStyleFuzzTest(data, size);
123 OHOS::MMI::SetKeyboardRepeatDelayFuzzTest(data, size);
124 return 0;
125 }
126
127