From d5cfec8cfcd9df8b8a2cb8856d610f9de41588c4 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 22 Oct 2022 11:23:45 +1300 Subject: [PATCH] Allocate sufficient space for libdefate --- src/deflate/deflater.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/deflate/deflater.rs b/src/deflate/deflater.rs index 67e9ba10..93dbd43f 100644 --- a/src/deflate/deflater.rs +++ b/src/deflate/deflater.rs @@ -4,7 +4,11 @@ use libdeflater::{CompressionError, CompressionLvl, Compressor}; pub fn deflate(data: &[u8], level: u8, max_size: &AtomicMin) -> PngResult> { let mut compressor = Compressor::new(CompressionLvl::new(level.into()).unwrap()); - let capacity = max_size.get().unwrap_or(data.len() / 2); + // If adhering to a max_size we need to include at least 9 extra bytes of slack space (as specified in docs). + let capacity = max_size + .get() + .unwrap_or_else(|| compressor.zlib_compress_bound(data.len())) + + 9; let mut dest = vec![0; capacity]; let len = compressor .zlib_compress(data, &mut dest)