]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
compress: prevent divide-by-zero when no data is read (#37706)
authorAlex <alexguo1023@gmail.com>
Tue, 3 Jun 2025 01:51:00 +0000 (21:51 -0400)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 25 Jun 2025 17:17:42 +0000 (18:17 +0100)
If the first call to `loop_read()` returns 0 (no input), `total_in`
remains 0, causing `total_out/total_in` to potential divide by zero.

We add a check before logging the compression ratio to skip the
percentage calculation when total_in is zero.

Co-authored-by: jinyaoguo <guo846@purdue.edu>
(cherry picked from commit 2584f745e0509472e68449bd81c60c26056d514a)
(cherry picked from commit 18a42e321d699e7f3ae46930fa070228d02774ed)

src/basic/compress.c

index 33b27d3b99cfb8c95f46ba8f5d6119f6a034a737..b9e3f140f536ac639fe60f9792ce007690591241 100644 (file)
@@ -894,9 +894,12 @@ int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes, uint64_t *ret_unco
         if (ret_uncompressed_size)
                 *ret_uncompressed_size = total_in;
 
-        log_debug("LZ4 compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
-                  total_in, total_out,
-                  (double) total_out / total_in * 100);
+        if (total_in == 0)
+                log_debug("LZ4 compression finished (no input data)");
+        else
+                log_debug("LZ4 compression finished (%" PRIu64 " -> %" PRIu64 " bytes, %.1f%%)",
+                        total_in, total_out,
+                        (double) total_out / total_in * 100);
 
         return 0;
 #else