]> 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 12:36:10 +0000 (13:36 +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)

src/basic/compress.c

index 06db2eed7d7e81471929c71b666bf19fb7a766c7..c9ab6b9c8f4aeae03e01af23a3914f76d8910035 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