/src/janet/test/fuzzers/fuzz_dostring.c
Line | Count | Source (jump to first uncovered line) |
1 | | #include <stdint.h> |
2 | | #include <string.h> |
3 | | #include <janet.h> |
4 | | |
5 | 5.24k | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
6 | | |
7 | | /* init Janet */ |
8 | 5.24k | janet_init(); |
9 | | |
10 | | /* fuzz the parser */ |
11 | 5.24k | JanetParser parser; |
12 | 5.24k | janet_parser_init(&parser); |
13 | 65.2M | for (int i = 0, done = 0; i < size; i++) { |
14 | 65.2M | switch (janet_parser_status(&parser)) { |
15 | 0 | case JANET_PARSE_DEAD: |
16 | 108 | case JANET_PARSE_ERROR: |
17 | 108 | done = 1; |
18 | 108 | break; |
19 | 65.1M | case JANET_PARSE_PENDING: |
20 | 65.1M | if (i == size) { |
21 | 0 | janet_parser_eof(&parser); |
22 | 65.1M | } else { |
23 | 65.1M | janet_parser_consume(&parser, data[i]); |
24 | 65.1M | } |
25 | 65.1M | break; |
26 | 40.1k | case JANET_PARSE_ROOT: |
27 | 40.1k | if (i >= size) { |
28 | 0 | janet_parser_eof(&parser); |
29 | 40.1k | } else { |
30 | 40.1k | janet_parser_consume(&parser, data[i]); |
31 | 40.1k | } |
32 | 40.1k | break; |
33 | 65.2M | } |
34 | | |
35 | 65.2M | if (done == 1) |
36 | 108 | break; |
37 | 65.2M | } |
38 | 5.24k | janet_parser_deinit(&parser); |
39 | | |
40 | | /* cleanup Janet */ |
41 | 5.24k | janet_deinit(); |
42 | | |
43 | 5.24k | return 0; |
44 | 5.24k | } |
45 | | |