@@ -132,28 +132,40 @@ impl Worker {
132132 worker. sess . reset_pass_coverage ( ) ;
133133 worker. sess . initialize ( & mut worker. stats ) ;
134134 eprintln ! ( "running orc's inputs ..." ) ;
135+ let mut discarded_input_size = 0 ;
136+ let mut interesting_inputs = 0 ;
137+ let orc_input_count = corpus. len ( ) ;
135138 for input in corpus {
136139 if input. len ( ) > worker. sess . swarm . input_alloc_size ( ) {
140+ discarded_input_size += 1 ;
137141 continue ;
138142 }
139143 // NOTE: we don't need to trace here if we're going to throw them away anyways!
140- let res = worker. on_corpus ( & input, false ) ;
144+ let res = worker. on_corpus ( & input, true ) ;
141145 if matches ! ( res, Err ( _) | Ok ( InputVerdict :: Crashed ) ) {
146+ eprintln ! ( "Worker::new crashed on corpus entry: {:?}" , res) ;
142147 break ;
143148 }
149+ interesting_inputs += matches ! ( res, Ok ( InputVerdict :: Interesting ) ) as usize ;
144150 }
151+ if discarded_input_size > 0 {
152+ eprintln ! ( "discarded {discarded_input_size} inputs due to size limit" ) ;
153+ }
154+ eprintln ! ( "interesting inputs: {interesting_inputs}/{orc_input_count}" ) ;
145155 eprintln ! (
146- "after fetch_corpus: {} edges" ,
147- worker. sess. get_edge_cov( ) . unwrap_or( 0 )
156+ "after fetch_corpus: {} edges, {} inputs" ,
157+ worker. sess. get_edge_cov( ) . unwrap_or( 0 ) ,
158+ worker. corpus. count( )
148159 ) ;
149160 for _ in 0 ..10 {
150161 if !worker. inmemory_cmin ( false ) {
151162 break ;
152163 }
153164 }
154165 eprintln ! (
155- "after inmem_cmin: {} edges" ,
156- worker. sess. get_edge_cov( ) . unwrap_or( 0 )
166+ "after inmem_cmin: {} edges, {} inputs" ,
167+ worker. sess. get_edge_cov( ) . unwrap_or( 0 ) ,
168+ worker. corpus. count( )
157169 ) ;
158170 }
159171 }
@@ -165,6 +177,8 @@ impl Worker {
165177 fn on_corpus ( & mut self , input : & [ u8 ] , is_seed : bool ) -> Result < InputVerdict , libafl:: Error > {
166178 tracy_full:: zone!( "Worker::on_corpus" ) ;
167179 let ignore_crashes = * self . opts . x . fuzz_through_crashes ;
180+
181+ let mut was_interesting = false ;
168182 if !* self . opts . x . run_from_snapshot {
169183 let res = self . sess . run_reusable ( input, false , & mut self . stats ) ;
170184 if res. is_crash ( ) && !ignore_crashes {
@@ -174,6 +188,7 @@ impl Worker {
174188 if is_seed && !res. novel_coverage {
175189 return Ok ( InputVerdict :: NotInteresting ) ;
176190 }
191+ was_interesting = res. novel_coverage ;
177192 }
178193
179194 // make sure we catch inputs that crash on fresh instances but not on used ones (TODO?)
@@ -183,7 +198,7 @@ impl Worker {
183198 return Ok ( InputVerdict :: Crashed ) ;
184199 }
185200
186- if !res. novel_coverage {
201+ if !res. novel_coverage && !was_interesting {
187202 return Ok ( InputVerdict :: NotInteresting ) ;
188203 }
189204
0 commit comments