From f74726915131ec7ff1df0514436aac34bc603cff Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Wed, 1 Apr 2020 04:31:17 +0100 Subject: [PATCH] Respect deadline in miniz (#200) --- src/deflate/miniz_stream.rs | 6 +++++- src/deflate/mod.rs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/deflate/miniz_stream.rs b/src/deflate/miniz_stream.rs index 82e7f21c..b44ed212 100644 --- a/src/deflate/miniz_stream.rs +++ b/src/deflate/miniz_stream.rs @@ -3,12 +3,13 @@ use crate::error::PngError; use crate::PngResult; use miniz_oxide::deflate::core::*; -pub fn compress_to_vec_oxipng( +pub(crate) fn compress_to_vec_oxipng( input: &[u8], level: u8, window_bits: i32, strategy: i32, max_size: &AtomicMin, + deadline: &crate::Deadline, ) -> PngResult> { // The comp flags function sets the zlib flag if the window_bits parameter is > 0. let flags = create_comp_flags_from_zip_params(level.into(), window_bits, strategy); @@ -45,6 +46,9 @@ pub fn compress_to_vec_oxipng( return Err(PngError::DeflatedDataTooLong(output.len())); } } + if deadline.passed() { + return Err(PngError::TimedOut); + } // We need more space, so extend the vector. if output.len().saturating_sub(out_pos) < 30 { let current_len = output.len(); diff --git a/src/deflate/mod.rs b/src/deflate/mod.rs index e7b5dcca..9648c813 100644 --- a/src/deflate/mod.rs +++ b/src/deflate/mod.rs @@ -44,7 +44,7 @@ pub(crate) fn deflate( } } - miniz_stream::compress_to_vec_oxipng(data, zc, zw.into(), zs.into(), max_size) + miniz_stream::compress_to_vec_oxipng(data, zc, zw.into(), zs.into(), max_size, deadline) } pub fn zopfli_deflate(data: &[u8]) -> PngResult> {