From ae8936c937faa88316bcad59b29fd94e783b3617 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Thu, 22 Feb 2024 22:05:09 +0100 Subject: [PATCH] fix: Fix possible overflow in progress bar ETA --- src/config/progress_options.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/config/progress_options.rs b/src/config/progress_options.rs index 2f4fcd4a6..cfb41cea5 100644 --- a/src/config/progress_options.rs +++ b/src/config/progress_options.rs @@ -131,11 +131,13 @@ impl Progress for RusticProgress { ProgressType::Bytes => { self.0.set_style( ProgressStyle::default_bar() - .with_key("my_eta", |s: &ProgressState, w: &mut dyn Write| - match (s.pos(), s.len()){ - (pos,Some(len)) if pos != 0 => write!(w,"{:#}", HumanDuration(Duration::from_secs(s.elapsed().as_secs() * (len-pos)/pos))), + .with_key("my_eta", |s: &ProgressState, w: &mut dyn Write| { + let _ = match (s.pos(), s.len()){ + // Extra checks to prevent panics from dividing by zero or subtract overflow + (pos,Some(len)) if pos != 0 && len > pos => write!(w,"{:#}", HumanDuration(Duration::from_secs(s.elapsed().as_secs() * (len-pos)/pos))), (_, _) => write!(w,"-"), - }.unwrap()) + }; + }) .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {bytes:>10}/{total_bytes:10} {bytes_per_sec:12} (ETA {my_eta})") .unwrap() );