1100ae2f9Sopenharmony_ci/* 2100ae2f9Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3100ae2f9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4100ae2f9Sopenharmony_ci * you may not use this file except in compliance with the License. 5100ae2f9Sopenharmony_ci * You may obtain a copy of the License at 6100ae2f9Sopenharmony_ci * 7100ae2f9Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8100ae2f9Sopenharmony_ci * 9100ae2f9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10100ae2f9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11100ae2f9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12100ae2f9Sopenharmony_ci * See the License for the specific language governing permissions and 13100ae2f9Sopenharmony_ci * limitations under the License. 14100ae2f9Sopenharmony_ci */ 15100ae2f9Sopenharmony_ci 16100ae2f9Sopenharmony_ci#include "native_implement_eventhandler.h" 17100ae2f9Sopenharmony_ci#include "native_interface_eventhandler.h" 18100ae2f9Sopenharmony_ci#include "nativeimplementeventhandler_fuzzer.h" 19100ae2f9Sopenharmony_ci#include "securec.h" 20100ae2f9Sopenharmony_ci 21100ae2f9Sopenharmony_cinamespace OHOS { 22100ae2f9Sopenharmony_cinamespace { 23100ae2f9Sopenharmony_ci constexpr size_t U32_AT_SIZE = 4; 24100ae2f9Sopenharmony_ci constexpr uint8_t ENABLE = 2; 25100ae2f9Sopenharmony_ci} 26100ae2f9Sopenharmony_cibool DoSomethingInterestingWithMyAPI(const char* data, size_t size) 27100ae2f9Sopenharmony_ci{ 28100ae2f9Sopenharmony_ci bool current = *data % ENABLE; 29100ae2f9Sopenharmony_ci if (current == 0) { 30100ae2f9Sopenharmony_ci int32_t fileDescriptor = U32_AT(reinterpret_cast<const uint8_t*>(data)); 31100ae2f9Sopenharmony_ci EventRunnerNativeImplement eventRunnerNativeImplement(current); 32100ae2f9Sopenharmony_ci eventRunnerNativeImplement.RemoveFileDescriptorListener(fileDescriptor); 33100ae2f9Sopenharmony_ci return true; 34100ae2f9Sopenharmony_ci } else { 35100ae2f9Sopenharmony_ci return false; 36100ae2f9Sopenharmony_ci } 37100ae2f9Sopenharmony_ci} 38100ae2f9Sopenharmony_ci} 39100ae2f9Sopenharmony_ci 40100ae2f9Sopenharmony_ci/* Fuzzer entry point */ 41100ae2f9Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 42100ae2f9Sopenharmony_ci{ 43100ae2f9Sopenharmony_ci /* Run your code on data */ 44100ae2f9Sopenharmony_ci if (data == nullptr) { 45100ae2f9Sopenharmony_ci return 0; 46100ae2f9Sopenharmony_ci } 47100ae2f9Sopenharmony_ci 48100ae2f9Sopenharmony_ci if (size < OHOS::U32_AT_SIZE) { 49100ae2f9Sopenharmony_ci return 0; 50100ae2f9Sopenharmony_ci } 51100ae2f9Sopenharmony_ci 52100ae2f9Sopenharmony_ci char* ch = reinterpret_cast<char *>(malloc(size + 1)); 53100ae2f9Sopenharmony_ci if (ch == nullptr) { 54100ae2f9Sopenharmony_ci return 0; 55100ae2f9Sopenharmony_ci } 56100ae2f9Sopenharmony_ci 57100ae2f9Sopenharmony_ci (void)memset_s(ch, size + 1, 0x00, size + 1); 58100ae2f9Sopenharmony_ci if (memcpy_s(ch, size, data, size) != EOK) { 59100ae2f9Sopenharmony_ci free(ch); 60100ae2f9Sopenharmony_ci ch = nullptr; 61100ae2f9Sopenharmony_ci return 0; 62100ae2f9Sopenharmony_ci } 63100ae2f9Sopenharmony_ci 64100ae2f9Sopenharmony_ci OHOS::DoSomethingInterestingWithMyAPI(ch, size); 65100ae2f9Sopenharmony_ci free(ch); 66100ae2f9Sopenharmony_ci ch = nullptr; 67100ae2f9Sopenharmony_ci return 0; 68100ae2f9Sopenharmony_ci} 69