]> wimlib.net Git - wimlib/blob - tools/libFuzzer/compress/fuzz.c
mount_image.c: add fallback definitions of RENAME_* constants
[wimlib] / tools / libFuzzer / compress / fuzz.c
1 #include "../fuzzer.h"
2
3 /* Fuzz the compression and decompression round trip. */
4 int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
5 {
6         int ctype;
7         int level;
8         struct wimlib_compressor *c;
9         struct wimlib_decompressor *d;
10         size_t csize_avail = insize;
11         uint8_t *cbuf;
12         uint8_t *decompressed;
13         size_t csize;
14         int ret;
15
16         if (insize < 2)
17                 return 0;
18         ctype = 1 + ((uint8_t)(in[0] - 1) % 3); /* 1-3 */
19         level = 1 + (in[1] % 100); /* 1-100 */
20         in += 2;
21         insize -= 2;
22
23         cbuf = malloc(csize_avail);
24         decompressed = malloc(insize);
25
26         ret = wimlib_create_compressor(ctype, insize, level, &c);
27         if (ret == 0) {
28                 ret = wimlib_create_decompressor(ctype, insize, &d);
29                 assert(ret == 0);
30
31                 csize = wimlib_compress(in, insize, cbuf, csize_avail, c);
32                 if (csize) {
33                         ret = wimlib_decompress(cbuf, csize,
34                                                 decompressed, insize, d);
35                         assert(ret == 0);
36                         assert(memcmp(in, decompressed, insize) == 0);
37                 }
38                 wimlib_free_compressor(c);
39                 wimlib_free_decompressor(d);
40         }
41         free(cbuf);
42         free(decompressed);
43         return 0;
44 }