]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-compression: istream-lz4 - Fix header reading
authorAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 6 Jul 2020 16:16:50 +0000 (19:16 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 30 Jul 2020 14:26:36 +0000 (17:26 +0300)
If data size was smaller than header size, lz4 reading would
return -1 without error indicating EOF instead of EINVAL.

Broken in c1a43c6098f0caf11e8a2c1889227ec3969e410e

src/lib-compression/istream-lz4.c

index 5728fd17aaf4ffa035aa8177cb8f1b9415763d4e..b70d1b7d9df6ce4fd7c9b2fffe8f4c0fcd2ac3ee 100644 (file)
@@ -55,8 +55,12 @@ static int i_stream_lz4_read_header(struct lz4_istream *zstream)
        buffer_append(zstream->chunk_buf, data, size);
        i_stream_skip(zstream->istream.parent, size);
        if (ret < 0) {
-               zstream->istream.istream.stream_errno =
-                       zstream->istream.parent->stream_errno;
+               if (zstream->istream.istream.stream_errno == 0) {
+                       lz4_read_error(zstream, "missing header (not lz4 file?)");
+                       zstream->istream.istream.stream_errno = EINVAL;
+               } else
+                       zstream->istream.istream.stream_errno =
+                               zstream->istream.parent->stream_errno;
                return ret;
        }
        if (ret == 0 && !zstream->istream.istream.eof)