Fall back to a temp file if fmemopen() is not available().
This commit is contained in:
@@ -43,7 +43,34 @@ open_sudoers(const char *file, bool doedit, bool *keepopen)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
static FILE *
|
||||
open_data(const uint8_t *data, size_t size)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
/* Operate in-memory. */
|
||||
return fmemopen((void *)data, size, "r");
|
||||
#else
|
||||
char tempfile[] = "/tmp/sudoers.XXXXXX";
|
||||
size_t nwritten;
|
||||
int fd;
|
||||
|
||||
/* Use (unlinked) temporary file. */
|
||||
fd = mkstemp(tempfile);
|
||||
if (fd == -1)
|
||||
return NULL;
|
||||
unlink(tempfile);
|
||||
nwritten = write(fd, data, size);
|
||||
if (nwritten != size) {
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
return fdopen(fd, "r");
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
@@ -51,8 +78,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
if (size < 5)
|
||||
return 0;
|
||||
|
||||
/* Operate in-memory. */
|
||||
fp = fmemopen((void *)data, size, "r");
|
||||
fp = open_data(data, size);
|
||||
if (fp == NULL)
|
||||
return 0;
|
||||
|
||||
|
Reference in New Issue
Block a user