fuzz_manager.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. fuzz_manager_t fuzz_manager = {0};
  8. void generate_temp_file_name(char *buf, size_t size)
  9. {
  10. int fd;
  11. strncpy(buf, "/dev/shm/fuzz_file_XXXXXX", size);
  12. if (-1 == (fd = mkstemp(buf)))
  13. {
  14. perror("mkstemp");
  15. exit(EXIT_FAILURE);
  16. }
  17. close(fd);
  18. }
  19. void fuzz_manager_init()
  20. {
  21. if (fuzz_manager.is_init)
  22. {
  23. return;
  24. }
  25. fuzz_set_target_size(-75);
  26. fuzz_manager.is_init = true;
  27. fuzz_manager.log_fh = fopen("/dev/null", "a"); // Do not log
  28. generate_temp_file_name(fuzz_manager.fuzz_file_name, PATH_MAX);
  29. generate_temp_file_name(fuzz_manager.new_fuzz_file_name, PATH_MAX);
  30. strncpy(fuzz_manager.tmp_dir, fuzz_manager.fuzz_file_name, PATH_MAX);
  31. dirname(fuzz_manager.tmp_dir);
  32. // Ensure the temp path ends with a /
  33. size_t tmp_len = strnlen(fuzz_manager.tmp_dir, PATH_MAX);
  34. if (tmp_len < PATH_MAX - 1 && fuzz_manager.tmp_dir[tmp_len - 1] != '/')
  35. {
  36. fuzz_manager.tmp_dir[tmp_len] = '/';
  37. fuzz_manager.tmp_dir[tmp_len + 1] = '\0';
  38. }
  39. }