summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2018-05-24 01:43:48 +0000
committerKostya Serebryany <kcc@google.com>2018-05-24 01:43:48 +0000
commit4d53b744ca0e8f7efa43da5b43ed42120a3b32d9 (patch)
tree62e5c01f9634c7f301b784227c87ed2a1e434ba8 /compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp
parent49d7c2f597dea4a6398c43217660a2106496f5dc (diff)
downloadbcm5719-llvm-4d53b744ca0e8f7efa43da5b43ed42120a3b32d9.tar.gz
bcm5719-llvm-4d53b744ca0e8f7efa43da5b43ed42120a3b32d9.zip
[libFuzzer] DataFlow tracer now tags a subset of the input. A separate script merges traces from the subsets
llvm-svn: 333149
Diffstat (limited to 'compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp')
-rw-r--r--compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp b/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp
index c55c68ea9da..99863074d72 100644
--- a/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp
+++ b/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp
@@ -118,9 +118,12 @@ int main(int argc, char **argv) {
LLVMFuzzerInitialize(&argc, &argv);
if (argc == 1)
return PrintFunctions();
- assert(argc == 2 || argc == 3);
+ assert(argc == 4 || argc == 5);
+ size_t Beg = atoi(argv[1]);
+ size_t End = atoi(argv[2]);
+ assert(Beg < End);
- const char *Input = argv[1];
+ const char *Input = argv[3];
fprintf(stderr, "INFO: reading '%s'\n", Input);
FILE *In = fopen(Input, "r");
assert(In);
@@ -137,7 +140,9 @@ int main(int argc, char **argv) {
for (size_t I = 1; I <= InputLen; I++) {
dfsan_label L = dfsan_create_label("", nullptr);
assert(L == I);
- dfsan_set_label(L, Buf + I - 1, 1);
+ size_t Idx = I - 1;
+ if (Idx >= Beg && Idx < End)
+ dfsan_set_label(L, Buf + Idx, 1);
}
dfsan_label SizeL = dfsan_create_label("", nullptr);
assert(SizeL == InputLen + 1);
@@ -146,10 +151,10 @@ int main(int argc, char **argv) {
LLVMFuzzerTestOneInput(Buf, InputLen);
free(Buf);
- bool OutIsStdout = argc == 2;
+ bool OutIsStdout = argc == 4;
fprintf(stderr, "INFO: writing dataflow to %s\n",
- OutIsStdout ? "<stdout>" : argv[2]);
- FILE *Out = OutIsStdout ? stdout : fopen(argv[2], "w");
+ OutIsStdout ? "<stdout>" : argv[4]);
+ FILE *Out = OutIsStdout ? stdout : fopen(argv[4], "w");
PrintDataFlow(Out);
if (!OutIsStdout) fclose(Out);
}
OpenPOWER on IntegriCloud