Open
Description
FuzzerIOPosix.cpp hasn't enabled Large File Support/LFS for 32bit targets. All stat() invocations return EOVERFLOW
on large file systems. Consequently, IsFile(), IsDirectory(), FileSize()
will always return false/zero and e.g. my32BitFuzzBinary CORPUS
stops with "ERROR: The required directory "CORPUS" does not exist"
Patching FuzzerIOPosix.cpp like this overcomes the issue (albeit adding -D_FILE_OFFSET_BITS=64 to the CMakefiles is a cleaner solution):
//...
#if (LIBFUZZER_POSIX || LIBFUZZER_FUCHSIA)
// turn LFS on for i386 (and other supported 32 bit platforms)
#if __i386
#define _FILE_OFFSET_BITS 64
#endif
#include "FuzzerExtFunctions.h"
#include "FuzzerIO.h"
#include <cstdarg>
#include <cstdio>
#include <dirent.h>
#include <fstream>
#include <iterator>
#include <libgen.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
// ensure LFS is turned on
static_assert(sizeof(off_t) == 8, "Large file interface is not present, see _FILE_OFFSET_BITS in https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html");
namespace fuzzer {
//...