]> wimlib.net Git - wimlib/blob - tools/libFuzzer/xml_windows/fuzz.c
libFuzzer: add xml_windows fuzzer
[wimlib] / tools / libFuzzer / xml_windows / fuzz.c
1 #include "../fuzzer.h"
2
3 #include <sys/stat.h>
4
5 #define TMPDIR "/tmp/fuzz-xml-windows/"
6
7 static void
8 write_file(const char *path, const void *data, size_t size)
9 {
10         int fd;
11         ssize_t res;
12
13         fd = open(path, O_WRONLY|O_TRUNC|O_CREAT, 0600);
14         assert(fd >= 0);
15         res = write(fd, data, size);
16         assert(res == size);
17         close(fd);
18 }
19
20 /* Fuzz set_windows_specific_info() in xml_windows.c. */
21 int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
22 {
23         WIMStruct *wim;
24         int ret;
25
26         mkdir(TMPDIR, 0700);
27         mkdir(TMPDIR "Windows", 0700);
28         mkdir(TMPDIR "Windows", 0700);
29         mkdir(TMPDIR "Windows/System32", 0700);
30         mkdir(TMPDIR "Windows/System32/config", 0700);
31         write_file(TMPDIR "Windows/System32/kernel32.dll", in, insize);
32         write_file(TMPDIR "Windows/System32/config/SYSTEM", in, insize);
33         write_file(TMPDIR "Windows/System32/config/SOFTWARE", in, insize);
34
35         ret = wimlib_create_new_wim(WIMLIB_COMPRESSION_TYPE_NONE, &wim);
36         assert(!ret);
37
38         ret = wimlib_add_image(wim, TMPDIR, NULL, NULL, 0);
39         assert(!ret);
40
41         wimlib_free(wim);
42         return 0;
43 }