From: Alex Date: Tue, 3 Jun 2025 01:51:00 +0000 (-0400) Subject: compress: prevent divide-by-zero when no data is read (#37706) X-Git-Tag: v258-rc1~416 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2584f745e0509472e68449bd81c60c26056d514a;p=thirdparty%2Fsystemd.git compress: prevent divide-by-zero when no data is read (#37706) 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 --- diff --git a/src/basic/compress.c b/src/basic/compress.c index 3270a7ed104..e9abe6fead7 100644 --- a/src/basic/compress.c +++ b/src/basic/compress.c @@ -921,9 +921,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