#include "file.h"
#ifndef lint
FILE_RCSID("@(#)$File: magic_fuzzer.c,v 1.3 2022/09/24 20:30:13 christos Exp $")
#endif
#include "magic.h"
#include <libgen.h>
#include <stdlib.h>
#include <err.h>
int LLVMFuzzerInitialize(int *, char ***);
int LLVMFuzzerTestOneInput(const uint8_t *, size_t);
static magic_t magic;
int
LLVMFuzzerInitialize(int *argc, char ***argv)
{
char dfile[MAXPATHLEN], mfile[MAXPATHLEN];
magic = magic_open(MAGIC_NONE);
if (magic == NULL) {
warn("magic_open");
return -1;
}
snprintf(dfile, sizeof(dfile), "%s", (*argv)[0]);
snprintf(mfile, sizeof(mfile), "%s/magic", dirname(dfile));
if (magic_load(magic, mfile) == -1) {
warnx("magic_load: %s", magic_error(magic));
return -1;
}
return 0;
}
int
LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
if (size == 0)
return 0;
magic_buffer(magic, data, size);
return 0;
}