From 9695d6a990477b7a61472d31741c786fc9b94efb Mon Sep 17 00:00:00 2001 From: Wilson Lin Date: Sat, 4 Jan 2020 17:50:39 +1100 Subject: [PATCH] Fix empty attribute processing --- fuzz/src/main.rs | 4 ++-- src/unit/attr/value.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) 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());