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