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 "eventqueue_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_ciclass DumperTest : public AppExecFwk::Dumper {
27100ae2f9Sopenharmony_cipublic:
28100ae2f9Sopenharmony_ci    DumperTest() = default;
29100ae2f9Sopenharmony_ci    virtual ~DumperTest()
30100ae2f9Sopenharmony_ci    {};
31100ae2f9Sopenharmony_ci    void Dump(const std::string &message) override
32100ae2f9Sopenharmony_ci    {}
33100ae2f9Sopenharmony_ci    std::string GetTag() override
34100ae2f9Sopenharmony_ci    {
35100ae2f9Sopenharmony_ci        return {};
36100ae2f9Sopenharmony_ci    }
37100ae2f9Sopenharmony_ci};
38100ae2f9Sopenharmony_ci
39100ae2f9Sopenharmony_cibool DoSomethingInterestingWithMyAPI(const char* data, size_t size)
40100ae2f9Sopenharmony_ci{
41100ae2f9Sopenharmony_ci    AppExecFwk::InnerEvent::TimePoint nextExpiredTime = AppExecFwk::InnerEvent::TimePoint::max();
42100ae2f9Sopenharmony_ci    DumperTest dumper;
43100ae2f9Sopenharmony_ci    std::string stringData(data);
44100ae2f9Sopenharmony_ci    std::shared_ptr<AppExecFwk::IoWaiter> ioWaiter = nullptr;
45100ae2f9Sopenharmony_ci    AppExecFwk::EventQueueBase eventQueue(ioWaiter);
46100ae2f9Sopenharmony_ci    eventQueue.GetExpiredEvent(nextExpiredTime);
47100ae2f9Sopenharmony_ci    eventQueue.Dump(dumper);
48100ae2f9Sopenharmony_ci    eventQueue.DumpQueueInfo(stringData);
49100ae2f9Sopenharmony_ci    eventQueue.IsQueueEmpty();
50100ae2f9Sopenharmony_ci    return true;
51100ae2f9Sopenharmony_ci}
52100ae2f9Sopenharmony_ci}
53100ae2f9Sopenharmony_ci
54100ae2f9Sopenharmony_ci/* Fuzzer entry point */
55100ae2f9Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
56100ae2f9Sopenharmony_ci{
57100ae2f9Sopenharmony_ci    /* Run your code on data */
58100ae2f9Sopenharmony_ci    if (data == nullptr) {
59100ae2f9Sopenharmony_ci        return 0;
60100ae2f9Sopenharmony_ci    }
61100ae2f9Sopenharmony_ci
62100ae2f9Sopenharmony_ci    if (size < OHOS::U32_AT_SIZE) {
63100ae2f9Sopenharmony_ci        return 0;
64100ae2f9Sopenharmony_ci    }
65100ae2f9Sopenharmony_ci
66100ae2f9Sopenharmony_ci    char* ch = (char *)malloc(size + 1);
67100ae2f9Sopenharmony_ci    if (ch == nullptr) {
68100ae2f9Sopenharmony_ci        return 0;
69100ae2f9Sopenharmony_ci    }
70100ae2f9Sopenharmony_ci
71100ae2f9Sopenharmony_ci    (void)memset_s(ch, size + 1, 0x00, size + 1);
72100ae2f9Sopenharmony_ci    if (memcpy_s(ch, size, data, size) != EOK) {
73100ae2f9Sopenharmony_ci        free(ch);
74100ae2f9Sopenharmony_ci        ch = nullptr;
75100ae2f9Sopenharmony_ci        return 0;
76100ae2f9Sopenharmony_ci    }
77100ae2f9Sopenharmony_ci
78100ae2f9Sopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(ch, size);
79100ae2f9Sopenharmony_ci    free(ch);
80100ae2f9Sopenharmony_ci    ch = nullptr;
81100ae2f9Sopenharmony_ci    return 0;
82100ae2f9Sopenharmony_ci}
83