1 #include <cstdint>
2 #include <cstdio>
3
4 #include "cbor.h"
5
limited_malloc(size_t size)6 void *limited_malloc(size_t size) {
7 if (size > 1 << 24) {
8 return nullptr;
9 }
10 return malloc(size);
11 }
12
13 struct State {
14 FILE* fout;
15
StateState16 State() : fout(fopen("/dev/null", "r")) {
17 cbor_set_allocs(limited_malloc, realloc, free);
18 }
19 };
20
21 static State kState;
22
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)23 extern "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