From 1b15cb50980b4017036a77b9d5221334ef7728cc Mon Sep 17 00:00:00 2001 From: Nathaniel Brough Date: Fri, 22 Dec 2023 17:23:30 -0800 Subject: [PATCH] Fuzz for of gix-ref log --- gix-ref/fuzz/fuzz_targets/fuzz_log.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/gix-ref/fuzz/fuzz_targets/fuzz_log.rs b/gix-ref/fuzz/fuzz_targets/fuzz_log.rs index 54a06f5e4ef..423da5479de 100644 --- a/gix-ref/fuzz/fuzz_targets/fuzz_log.rs +++ b/gix-ref/fuzz/fuzz_targets/fuzz_log.rs @@ -1,17 +1,34 @@ #![no_main] use anyhow::Result; +use arbitrary::Arbitrary; use gix_ref::file::log; use libfuzzer_sys::fuzz_target; use std::hint::black_box; -fn fuzz(line: &[u8]) -> Result<()> { - let line = log::LineRef::from_bytes(line)?; +#[derive(Arbitrary, Debug)] +struct Ctx<'a> { + line_ref: &'a [u8], + multi_line_reverse: &'a [u8], + multi_line_forward: &'a [u8], +} + +fn fuzz(ctx: Ctx) -> Result<()> { + let line = log::LineRef::from_bytes(ctx.line_ref)?; _ = black_box(line.previous_oid()); _ = black_box(line.new_oid()); + + let mut buf = [0u8; 1024]; + let read = std::io::Cursor::new(ctx.multi_line_reverse); + let mut iter = gix_ref::file::log::iter::reverse(read, &mut buf)?; + _ = black_box(iter.map(|x| black_box(x)).count()); + + let mut iter = gix_ref::file::log::iter::forward(ctx.multi_line_forward); + _ = black_box(iter.map(|x| black_box(x)).count()); + Ok(()) } -fuzz_target!(|ctx: &[u8]| { +fuzz_target!(|ctx: Ctx| { _ = black_box(fuzz(ctx)); });