Handle read_data errors correctly
authorJonathan Dieter <jdieter@gmail.com>
Tue, 4 Apr 2023 20:11:12 +0000 (21:11 +0100)
committerJonathan Dieter <jdieter@gmail.com>
Tue, 4 Apr 2023 20:11:12 +0000 (21:11 +0100)
The read_data function returns the number of bytes written, not a boolean,
so fix the error checking so we exit if fewer than expected bytes were
read.  Thanks to Agostino Sarubbo of Gentoo for providing a bug report with
a reproducible test case.

Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/lib/header.c

index 565071e743056d33f5f4cc996a35f056c944f40f..7253207bffc8a61c09634f67b76151a2317ccdfb 100644 (file)
@@ -101,8 +101,10 @@ static bool read_header_from_file(zckCtx *zck) {
     zck_log(ZCK_LOG_DEBUG, "Reading the rest of the header: %llu bytes",
             (long long unsigned) zck->header_length);
     if(loaded < zck->header_length) {
-        if(!read_data(zck, header + loaded, zck->header_length - loaded))
+        if(read_data(zck, header + loaded, zck->header_length - loaded) < zck->header_length - loaded) {
+            set_fatal_error(zck, "Unable to read %llu bytes from the file", zck->header_length - loaded);
             return false;
+        }
         zck->header_size = zck->lead_size + zck->header_length;
     }