| 330 | |
| 331 | #[derive(Clone, Default, serde::Serialize, serde::Deserialize)] |
| 332 | pub(crate) struct InputMetadata { |
| 333 | /// A unique identifier assigned to this test case. |
| 334 | pub id: InputId, |
| 335 | /// The ID of the parent input that discovered this test-case |
| 336 | pub parent_id: Option<InputId>, |
| 337 | /// The length of the input chain required to reach this input. |
| 338 | pub depth: u64, |
| 339 | /// The cached length (in bytes) of the input. |
| 340 | pub len: u64, |
| 341 | /// The length of the input (in bytes) before the input was trimmed. |
| 342 | pub untrimed_len: u64, |
| 343 | /// The number of non-empty streams. |
| 344 | pub streams: u64, |
| 345 | /// The number of instructions executed by the VM when running the test case. |
| 346 | pub instructions: u64, |
| 347 | /// The number of coverage bits set for this input. |
| 348 | pub coverage_bits: u64, |
| 349 | /// The time (since the fuzzer started) in milliseconds that we found this input at. |
| 350 | pub found_at: u64, |
| 351 | /// The total time spent executing mutated versions of this input. |
| 352 | pub time: Duration, |
| 353 | /// The total number of times a mutated version of this input was mutated. |
| 354 | pub execs: u64, |
| 355 | /// The number of times a new path was found by mutating this input. |
| 356 | pub finds: u64, |
| 357 | /// The number of times the input has resulted in a hang after mutation. |
| 358 | pub hangs: u64, |
| 359 | /// The total number of times the input has resulted in a crash after mutation. |
| 360 | pub crashes: u64, |
| 361 | /// The number of executions that were made the last time we saved a mutated input. |
| 362 | pub last_find: u64, |
| 363 | /// The largest gap (in executions) since we found a new input. This is used for scalling the |
| 364 | /// mutation rate during Havoc. |
| 365 | pub max_find_gap: u64, |
| 366 | /// The new bits discovered by this input. |
| 367 | pub new_bits: Vec<u32>, |
| 368 | /// The stage that the input was discovered in. |
| 369 | pub stage: Stage, |
| 370 | /// The mutations that were performed to find this input. |
| 371 | pub mutation_kinds: Vec<MutationKind>, |
| 372 | /// The number of times this input as been chosen by the fuzzer. |
| 373 | pub rounds: u64, |
| 374 | /// The number of length extensions rounds applied to this input. |
| 375 | pub length_extension_rounds: u64, |
| 376 | /// The number of havoc rounds applied to this input. |
| 377 | pub havoc_rounds: u64, |
| 378 | /// Whether this was a crashing input. |
| 379 | pub is_crashing: bool, |
| 380 | } |
| 381 | |
| 382 | pub(crate) trait InputSource { |
| 383 | /// Get the next input the input queue. Returns `None` if the queue is empty. |
nothing calls this directly
no outgoing calls
no test coverage detected