diff --git a/fuzz/src/main.rs b/fuzz/src/main.rs index 67bc6eb..90b2819 100644 --- a/fuzz/src/main.rs +++ b/fuzz/src/main.rs @@ -1,9 +1,9 @@ use afl::fuzz; -use hyperbuild::{hyperbuild, ErrorType}; +use hyperbuild::hyperbuild; fn main() { fuzz!(|data: &[u8]| { let mut mut_data: Vec = data.iter().map(|x| *x).collect(); - hyperbuild(&mut mut_data); + let _ = hyperbuild(&mut mut_data); }); } diff --git a/src/unit/attr/value.rs b/src/unit/attr/value.rs index a300c51..dafb044 100644 --- a/src/unit/attr/value.rs +++ b/src/unit/attr/value.rs @@ -236,6 +236,14 @@ pub fn process_attr_value(proc: &mut Processor, should_collapse_and_trim_ws: boo }; // Ending delimiter quote (if any) has already been discarded at this point. let minimum_value = proc.written_range(src_start); + // If minimum value is empty, return now before trying to read out of range later. + // (Reading starts at one character before end of minimum value.) + if minimum_value.empty() { + return Ok(ProcessedAttrValue { + delimiter: DelimiterType::Unquoted, + value: None, + }); + }; // Stage 2: optimally minify attribute value using metrics. let (optimal_delimiter, optimal_len) = metrics.get_optimal_delimiter_type(minimum_value.len());