/src/jpegoptim/fuzz/fuzz_manager.c
Line | Count | Source |
1 | | #include <libgen.h> |
2 | | #include <stdlib.h> |
3 | | #include <string.h> |
4 | | #include <unistd.h> |
5 | | #include "fuzz_manager.h" |
6 | | #include "jpegoptim.h" |
7 | | |
8 | | fuzz_manager_t fuzz_manager = {0}; |
9 | | |
10 | | void generate_temp_file_name(char *buf, size_t size) |
11 | 2 | { |
12 | 2 | int fd; |
13 | 2 | strncpy(buf, "/dev/shm/fuzz_file_XXXXXX", size); |
14 | 2 | if (-1 == (fd = mkstemp(buf))) |
15 | 0 | { |
16 | 0 | perror("mkstemp"); |
17 | 0 | exit(EXIT_FAILURE); |
18 | 0 | } |
19 | 2 | close(fd); |
20 | 2 | } |
21 | | |
22 | | void fuzz_manager_init() |
23 | 635 | { |
24 | 635 | if (fuzz_manager.is_init) |
25 | 634 | { |
26 | 634 | return; |
27 | 634 | } |
28 | | |
29 | 1 | fuzz_set_target_size(-75); |
30 | | |
31 | 1 | fuzz_manager.is_init = true; |
32 | 1 | fuzz_manager.log_fh = fopen("/dev/null", "a"); // Do not log |
33 | | |
34 | 1 | generate_temp_file_name(fuzz_manager.fuzz_file_name, PATH_MAX); |
35 | 1 | generate_temp_file_name(fuzz_manager.new_fuzz_file_name, PATH_MAX); |
36 | | |
37 | 1 | strncpy(fuzz_manager.tmp_dir, fuzz_manager.fuzz_file_name, PATH_MAX); |
38 | 1 | dirname(fuzz_manager.tmp_dir); |
39 | | // Ensure the temp path ends with a / |
40 | 1 | size_t tmp_len = strnlen(fuzz_manager.tmp_dir, PATH_MAX); |
41 | | |
42 | 1 | if (tmp_len < PATH_MAX - 1 && fuzz_manager.tmp_dir[tmp_len - 1] != '/') |
43 | 1 | { |
44 | 1 | fuzz_manager.tmp_dir[tmp_len] = '/'; |
45 | 1 | fuzz_manager.tmp_dir[tmp_len + 1] = '\0'; |
46 | 1 | } |
47 | 1 | } |