From 054ccd6d14b2cc6eddc56897af280d3221414150 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 25 Oct 2022 23:09:11 +0300 Subject: [PATCH] xz: Fix --single-stream with an empty .xz Stream. Example: $ xz -dc --single-stream good-0-empty.xz xz: good-0-empty.xz: Internal error (bug) The code, that is tries to catch some input file issues early, didn't anticipate LZMA_STREAM_END which is possible in that code only when --single-stream is used. --- src/xz/coder.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/xz/coder.c b/src/xz/coder.c index 98e9783a..fdd2e304 100644 --- a/src/xz/coder.c +++ b/src/xz/coder.c @@ -626,6 +626,15 @@ coder_init(file_pair *pair) == LZMA_UNSUPPORTED_CHECK) message_warning("%s: %s", pair->src_name, message_strm(ret)); + + // With --single-stream lzma_code won't wait for + // LZMA_FINISH and thus it can return LZMA_STREAM_END + // if the file has no uncompressed data inside. + // So treat LZMA_STREAM_END as LZMA_OK here. + // When lzma_code() is called again in coder_normal() + // it will return LZMA_STREAM_END again. + if (ret == LZMA_STREAM_END) + ret = LZMA_OK; } #endif }