mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 00:50:03 +08:00
[fuzzer] Read files as binary
Summary: Read corpus files as binary to avoid automatic conversions Reviewers: Dor1s, morehouse Reviewed By: Dor1s, morehouse Differential Revision: https://reviews.llvm.org/D54180 llvm-svn: 346279
This commit is contained in:
@@ -31,7 +31,7 @@ long GetEpoch(const std::string &Path) {
|
||||
}
|
||||
|
||||
Unit FileToVector(const std::string &Path, size_t MaxSize, bool ExitOnError) {
|
||||
std::ifstream T(Path);
|
||||
std::ifstream T(Path, std::ios::binary);
|
||||
if (ExitOnError && !T) {
|
||||
Printf("No such directory: %s; exiting\n", Path.c_str());
|
||||
exit(1);
|
||||
@@ -51,7 +51,7 @@ Unit FileToVector(const std::string &Path, size_t MaxSize, bool ExitOnError) {
|
||||
}
|
||||
|
||||
std::string FileToString(const std::string &Path) {
|
||||
std::ifstream T(Path);
|
||||
std::ifstream T(Path, std::ios::binary);
|
||||
return std::string((std::istreambuf_iterator<char>(T)),
|
||||
std::istreambuf_iterator<char>());
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ extern "C" size_t LLVMFuzzerMutate(uint8_t *Data, size_t Size, size_t MaxSize) {
|
||||
// Execute any files provided as parameters.
|
||||
int ExecuteFilesOnyByOne(int argc, char **argv) {
|
||||
for (int i = 1; i < argc; i++) {
|
||||
std::ifstream in(argv[i]);
|
||||
std::ifstream in(argv[i], std::ios::binary);
|
||||
in.seekg(0, in.end);
|
||||
size_t length = in.tellg();
|
||||
in.seekg (0, in.beg);
|
||||
|
||||
18
compiler-rt/test/fuzzer/ReadBinaryTest.cpp
Normal file
18
compiler-rt/test/fuzzer/ReadBinaryTest.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
|
||||
// Simple test for a fuzzer. Tests that fuzzer can read a file containing
|
||||
// carriage returns.
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) {
|
||||
std::string InputStr(reinterpret_cast<const char*>(Data), Size);
|
||||
std::string MagicStr("Hello\r\nWorld\r\n");
|
||||
if (InputStr == MagicStr) {
|
||||
std::cout << "BINGO!";
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
7
compiler-rt/test/fuzzer/read-binary.test
Normal file
7
compiler-rt/test/fuzzer/read-binary.test
Normal file
@@ -0,0 +1,7 @@
|
||||
# Test that libFuzzer reads files properly.
|
||||
|
||||
# Account for the fact that echo will add a trailing newline.
|
||||
RUN: echo -e "Hello\r\nWorld\r" > %t-testcase
|
||||
RUN: %cpp_compiler %S/ReadBinaryTest.cpp -o %t-fuzzer
|
||||
RUN: %run %t-fuzzer %t-testcase | FileCheck %s
|
||||
CHECK: BINGO!
|
||||
Reference in New Issue
Block a user