/* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "pointer_event.h" #include "pointeritem_fuzzer.h" #include "fuzzer/FuzzedDataProvider.h" #include "mmi_log.h" #include "securec.h" #undef MMI_LOG_TAG #define MMI_LOG_TAG "PointerItemFuzzTest" namespace OHOS { namespace MMI { void PointerItemGetFuncFuzzTest(PointerEvent::PointerItem &item) { item.GetPointerId(); item.GetDownTime(); item.IsPressed(); item.GetDisplayX(); item.GetDisplayY(); item.GetWindowX(); item.GetWindowY(); item.GetDisplayXPos(); item.GetDisplayYPos(); item.GetWindowXPos(); item.GetWindowYPos(); item.GetFixedDisplayX(); item.GetFixedDisplayY(); item.GetFixedDisplayXPos(); item.GetFixedDisplayYPos(); item.GetWidth(); item.GetHeight(); item.GetTiltX(); item.GetTiltY(); item.GetToolDisplayX(); item.GetToolDisplayY(); item.GetToolWindowX(); item.GetToolWindowY(); item.GetGlobalX(); item.GetGlobalY(); item.IsValidGlobalXY(); item.GetToolWidth(); item.GetToolHeight(); item.GetPressure(); item.GetMoveFlag(); item.GetLongAxis(); item.GetShortAxis(); item.GetDeviceId(); item.GetToolType(); item.GetTargetWindowId(); item.GetRawDx(); item.GetRawDy(); item.GetOriginPointerId(); item.GetRawDisplayX(); item.GetRawDisplayY(); item.GetBlobId(); item.GetTwist(); item.IsCanceled(); item.GetOrientation(); Parcel parcel; item.WriteToParcel(parcel); item.ReadFromParcel(parcel); } void PointerItemOtherFuzzTest(FuzzedDataProvider &provider, PointerEvent::PointerItem &item) { int32_t toolDisplayX = provider.ConsumeIntegral(); item.SetToolDisplayX(toolDisplayX); int32_t toolDisplayY = provider.ConsumeIntegral(); item.SetToolDisplayY(toolDisplayY); int32_t toolWindowX = provider.ConsumeIntegral(); item.SetToolWindowX(toolWindowX); int32_t toolWindowY = provider.ConsumeIntegral(); item.SetToolWindowY(toolWindowY); double globalX = provider.ConsumeFloatingPoint(); item.SetGlobalX(globalX); double globalY = provider.ConsumeFloatingPoint(); item.SetGlobalY(globalY); int32_t toolWidth = provider.ConsumeIntegral(); item.SetToolWidth(toolWidth); int32_t toolHeight = provider.ConsumeIntegral(); item.SetToolHeight(toolHeight); double pressure = provider.ConsumeFloatingPoint(); item.SetPressure(pressure); int32_t moveFlag = provider.ConsumeIntegral(); item.SetMoveFlag(moveFlag); int32_t longAxis = provider.ConsumeIntegral(); item.SetLongAxis(longAxis); int32_t shortAxis = provider.ConsumeIntegral(); item.SetShortAxis(shortAxis); int32_t deviceId = provider.ConsumeIntegral(); item.SetDeviceId(deviceId); int32_t toolType = provider.ConsumeIntegral(); item.SetToolType(toolType); int32_t targetWindowId = provider.ConsumeIntegral(); item.SetTargetWindowId(targetWindowId); int32_t rawDx = provider.ConsumeIntegral(); item.SetRawDx(rawDx); int32_t rawDy = provider.ConsumeIntegral(); item.SetRawDy(rawDy); int32_t originPointerId = provider.ConsumeIntegral(); item.SetOriginPointerId(originPointerId); int32_t rawDisplayX = provider.ConsumeIntegral(); item.SetRawDisplayX(rawDisplayX); int32_t rawDisplayY = provider.ConsumeIntegral(); item.SetRawDisplayY(rawDisplayY); int32_t blobId = provider.ConsumeIntegral(); item.SetBlobId(blobId); int32_t twist = provider.ConsumeIntegral(); item.SetTwist(twist); bool canceled = provider.ConsumeBool(); item.SetCanceled(canceled); int32_t orientation = provider.ConsumeIntegral(); item.SetOrientation(orientation); } bool PointerItemFuzzTest(const uint8_t *data, size_t size) { FuzzedDataProvider provider(data, size); PointerEvent::PointerItem item; int32_t pointerId = provider.ConsumeIntegral(); item.SetPointerId(pointerId); int64_t downTime = provider.ConsumeIntegral(); item.SetDownTime(downTime); bool pressed = provider.ConsumeBool(); item.SetPressed(pressed); int32_t displayX = provider.ConsumeIntegral(); item.SetDisplayX(displayX); int32_t displayY = provider.ConsumeIntegral(); item.SetDisplayY(displayY); int32_t windowX = provider.ConsumeIntegral(); item.SetWindowX(windowX); int32_t windowY = provider.ConsumeIntegral(); item.SetWindowY(windowY); double displayXPos = provider.ConsumeFloatingPoint(); item.SetDisplayXPos(displayXPos); double displayYPos = provider.ConsumeFloatingPoint(); item.SetDisplayYPos(displayYPos); double windowXPos = provider.ConsumeFloatingPoint(); item.SetWindowXPos(windowXPos); double windowYPos = provider.ConsumeFloatingPoint(); item.SetWindowYPos(windowYPos); int32_t fixedDisplayX = provider.ConsumeIntegral(); item.SetFixedDisplayX(fixedDisplayX); int32_t fixedDisplayY = provider.ConsumeIntegral(); item.SetFixedDisplayY(fixedDisplayY); double fixedDisplayXPos = provider.ConsumeFloatingPoint(); item.SetFixedDisplayXPos(fixedDisplayXPos); double fixedDisplayYPos = provider.ConsumeFloatingPoint(); item.SetFixedDisplayYPos(fixedDisplayYPos); int32_t width = provider.ConsumeIntegral(); item.SetWidth(width); int32_t height = provider.ConsumeIntegral(); item.SetHeight(height); double titleX = provider.ConsumeFloatingPoint(); item.SetTiltX(titleX); double titleY = provider.ConsumeFloatingPoint(); item.SetTiltY(titleY); PointerItemOtherFuzzTest(provider, item); PointerItemGetFuncFuzzTest(item); MMI_HILOGD("PointerItemFuzzTest"); return true; } } // MMI } // OHOS /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { /* Run your code on data */ if (data == nullptr) { return 0; } OHOS::MMI::PointerItemFuzzTest(data, size); return 0; }