@@ -39,32 +39,31 @@ import testing ;
39
39
] ;
40
40
41
41
local corpus.tar = [ glob-ex . : corpus.tar ] ;
42
+ local test-corpus ;
42
43
if $(corpus.tar)
43
44
{
44
45
# if an old corpus exists, use it
45
- # get it with curl -O --location -J https://bintray.com/pauldreik/boost.json/download_file?file_path=corpus%2Fcorpus.tar
46
46
make old-corpus
47
47
: $(corpus.tar)
48
48
: @untar-corpus
49
49
: <location>oldcorpus
50
50
;
51
+ explicit old-corpus ;
51
52
}
52
53
else
53
54
{
54
- alias old -corpus ;
55
+ test -corpus = [ glob-tree-ex ../test : *.json ] ;
55
56
}
56
- explicit old-corpus ;
57
-
58
-
59
- local initial-corpus = [ glob-tree-ex ../test : *.json ] ;
60
57
58
+ local old-runs = [ SORT [ glob-tree-ex old_crashes : * ] ] ;
59
+ make old_crashes : : common.MkDir : <location>. ;
60
+ explicit old_crashes ;
61
61
62
62
local variants = basic_parser parse parser direct_parse ;
63
63
for local variant in basic_parser parse parser direct_parse
64
64
{
65
65
local $(variant)-runs ;
66
66
local fuzzer = fuzzer_$(variant) ;
67
- lib $(fuzzer) : fuzz_$(variant).cpp /boost/json//boost_json ;
68
67
exe $(fuzzer)
69
68
: fuzz_$(variant).cpp /boost/json//json_sources
70
69
: requirements
@@ -73,44 +72,44 @@ for local variant in basic_parser parse parser direct_parse
73
72
;
74
73
75
74
# make sure the old crashes pass without problems
76
- local old-runs = [ glob-tree-ex old_crashes/$(variant) : * ] ;
77
75
if $(old-runs)
78
76
{
79
77
run $(fuzzer)
80
78
: target-name $(variant)-run-crashes
81
- : input-files [ SORT $(old-runs) ]
79
+ : input-files $(old-runs)
82
80
;
81
+ explicit $(variant)-run-crashes ;
83
82
$(variant)-runs += $(variant)-run-crashes ;
84
83
}
85
84
86
- make oldcorpus/$(variant)
87
- : old-corpus
88
- : common.MkDir
89
- : <location>.
90
- ;
91
- explicit oldcorpus/$(variant) ;
92
-
93
- # make an initial corpus from the test data already in the repo
94
- local seed-corpus ;
95
- for file in $(initial-corpus)
85
+ local old-corpus-deps ;
86
+ if $(corpus.tar)
96
87
{
97
- local copied = $(variant)/$(file:D=) ;
98
- make $(copied) : $(file) : common.copy : <location>seedcorpus ;
99
- explicit $(copied) ;
100
- seed-corpus += $(copied) ;
88
+ old-corpus-deps = old-corpus ;
101
89
}
102
- make seedcorpus/$(variant)
103
- : $(seed-corpus)
90
+ else
91
+ {
92
+ # make an initial corpus from the test data already in the repo
93
+ for file in $(test-corpus)
94
+ {
95
+ local copied = $(variant)/$(file:D=) ;
96
+ make $(copied) : $(file) : common.copy : <location>oldcorpus ;
97
+ explicit $(copied) ;
98
+ old-corpus-deps += $(copied) ;
99
+ }
100
+ }
101
+ make oldcorpus/$(variant)
102
+ : $(old-corpus-deps)
104
103
: common.MkDir
105
104
: <location>.
106
105
;
107
- explicit seedcorpus /$(variant) ;
106
+ explicit oldcorpus /$(variant) ;
108
107
109
108
# run the fuzzer for a short while
110
109
make out/$(variant)
111
110
: $(fuzzer)
112
111
oldcorpus/$(variant)
113
- seedcorpus/$(variant)
112
+ old_crashes
114
113
: @run-fuzzer
115
114
: <location>.
116
115
<flags>$(.MAXTIME)
@@ -122,8 +121,9 @@ for local variant in basic_parser parse parser direct_parse
122
121
# minimize the corpus
123
122
make cmin/$(variant)
124
123
: $(fuzzer)
125
- oldcorpus/$(variant)
126
124
out/$(variant)
125
+ oldcorpus/$(variant)
126
+ old_crashes
127
127
: @run-fuzzer
128
128
: <location>.
129
129
<flags>-merge=1
@@ -178,7 +178,7 @@ rule run-fuzzer ( target : sources * : props * )
178
178
actions run-fuzzer
179
179
{
180
180
$(.UBSAN_OPTIONS)
181
- $(>[1]) $(<) $(>[2]) $(>[3 ]) $(FLAGS)
181
+ $(>[1]) $(<) $(>[2- ]) $(FLAGS)
182
182
}
183
183
184
184
.TOUCH_FILE = [ common.file-touch-command ] ;
0 commit comments