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