#include "sysdep.h" #include "bfd.h" #include #include static int bufferToFile(const char * name, const uint8_t *Data, size_t Size) { FILE * fd; if (remove(name) != 0) { if (errno != ENOENT) { printf("failed remove, errno=%d\n", errno); return -1; } } fd = fopen(name, "wb"); if (fd == NULL) { printf("failed open, errno=%d\n", errno); return -2; } if (fwrite (Data, 1, Size, fd) != Size) { fclose(fd); return -3; } fclose(fd); return 0; } static int initialized = 0; //TODO? part of fuzzing char *target = NULL; int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (initialized == 0) { if (bfd_init () != BFD_INIT_MAGIC) { abort(); } initialized = 1; } if (bufferToFile("/tmp/fuzz.bfd", Data, Size) < 0) { abort(); } bfd *file = bfd_openr ("/tmp/fuzz.bfd", target); if (file == NULL) { return 0; } bfd_check_format (file, bfd_archive); //TODO loop over subfiles and more processing bfd_close (file); return 0; }