1#include <cstdint>
2#include <cstdio>
3
4#include "cbor.h"
5
6void *limited_malloc(size_t size) {
7    if (size > 1 << 24) {
8        return nullptr;
9    }
10    return malloc(size);
11}
12
13struct State {
14    FILE* fout;
15
16    State() : fout(fopen("/dev/null", "r")) {
17        cbor_set_allocs(limited_malloc, realloc, free);
18    }
19};
20
21static State kState;
22
23extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
24    cbor_load_result result;
25    cbor_item_t *item = cbor_load(Data, Size, &result);
26    if (result.error.code == CBOR_ERR_NONE) {
27        cbor_describe(item, kState.fout);
28        unsigned char *buffer;
29        size_t buffer_size;
30        cbor_serialize_alloc(item, &buffer, &buffer_size);
31        free(buffer);
32        cbor_item_t *copied = cbor_copy(item);
33        cbor_decref(&copied);
34        cbor_decref(&item);
35    }
36    return 0;
37}
38