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 "event_queue.h" 17100ae2f9Sopenharmony_ci#include "event_queue_base.h" 18100ae2f9Sopenharmony_ci#include "eventqueueinsert_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} 25100ae2f9Sopenharmony_ci 26100ae2f9Sopenharmony_cibool DoSomethingInterestingWithMyAPI(const char* data, size_t size) 27100ae2f9Sopenharmony_ci{ 28100ae2f9Sopenharmony_ci std::shared_ptr<AppExecFwk::IoWaiter> ioWaiter = nullptr; 29100ae2f9Sopenharmony_ci AppExecFwk::EventQueueBase eventQueue(ioWaiter); 30100ae2f9Sopenharmony_ci std::list<AppExecFwk::InnerEvent::Pointer> events; 31100ae2f9Sopenharmony_ci AppExecFwk::InnerEvent::Pointer event = std::move(events.front()); 32100ae2f9Sopenharmony_ci AppExecFwk::EventQueue::Priority priority = AppExecFwk::EventQueue::Priority::LOW; 33100ae2f9Sopenharmony_ci eventQueue.Insert(event, priority); 34100ae2f9Sopenharmony_ci return true; 35100ae2f9Sopenharmony_ci} 36100ae2f9Sopenharmony_ci} 37100ae2f9Sopenharmony_ci 38100ae2f9Sopenharmony_ci/* Fuzzer entry point */ 39100ae2f9Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 40100ae2f9Sopenharmony_ci{ 41100ae2f9Sopenharmony_ci /* Run your code on data */ 42100ae2f9Sopenharmony_ci if (data == nullptr) { 43100ae2f9Sopenharmony_ci return 0; 44100ae2f9Sopenharmony_ci } 45100ae2f9Sopenharmony_ci 46100ae2f9Sopenharmony_ci if (size < OHOS::U32_AT_SIZE) { 47100ae2f9Sopenharmony_ci return 0; 48100ae2f9Sopenharmony_ci } 49100ae2f9Sopenharmony_ci 50100ae2f9Sopenharmony_ci char* ch = (char *)malloc(size + 1); 51100ae2f9Sopenharmony_ci if (ch == nullptr) { 52100ae2f9Sopenharmony_ci return 0; 53100ae2f9Sopenharmony_ci } 54100ae2f9Sopenharmony_ci 55100ae2f9Sopenharmony_ci (void)memset_s(ch, size + 1, 0x00, size + 1); 56100ae2f9Sopenharmony_ci if (memcpy_s(ch, size, data, size) != EOK) { 57100ae2f9Sopenharmony_ci free(ch); 58100ae2f9Sopenharmony_ci ch = nullptr; 59100ae2f9Sopenharmony_ci return 0; 60100ae2f9Sopenharmony_ci } 61100ae2f9Sopenharmony_ci 62100ae2f9Sopenharmony_ci OHOS::DoSomethingInterestingWithMyAPI(ch, size); 63100ae2f9Sopenharmony_ci free(ch); 64100ae2f9Sopenharmony_ci ch = nullptr; 65100ae2f9Sopenharmony_ci return 0; 66100ae2f9Sopenharmony_ci} 67