diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2018-12-14 20:34:30 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2018-12-20 20:39:20 +0200 |
commit | b55d79461d1f6aeaac03c7dae84481e5eb8bea4c (patch) | |
tree | 9fd974fce3df578519297c3ff418611933febe89 /src/xz/coder.c | |
parent | xz: Update man page timestamp. (diff) | |
download | xz-b55d79461d1f6aeaac03c7dae84481e5eb8bea4c.tar.xz |
xz: Fix a crash in progress indicator when in passthru mode.
"xz -dcfv not_an_xz_file" crashed (all four options are
required to trigger it). It caused xz to call
lzma_get_progress(&strm, ...) when no coder was initialized
in strm. In this situation strm.internal is NULL which leads
to a crash in lzma_get_progress().
The bug was introduced when xz started using lzma_get_progress()
to get progress info for multi-threaded compression, so the
bug is present in versions 5.1.3alpha and higher.
Thanks to Filip Palian <Filip.Palian@pjwstk.edu.pl> for
the bug report.
Diffstat (limited to 'src/xz/coder.c')
-rw-r--r-- | src/xz/coder.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/xz/coder.c b/src/xz/coder.c index 3c6a01cb..f36d1bf2 100644 --- a/src/xz/coder.c +++ b/src/xz/coder.c @@ -902,16 +902,19 @@ coder_run(const char *filename) mytime_set_start_time(); // Initialize the progress indicator. + const bool is_passthru = init_ret + == CODER_INIT_PASSTHRU; const uint64_t in_size = pair->src_st.st_size <= 0 ? 0 : pair->src_st.st_size; - message_progress_start(&strm, in_size); + message_progress_start(&strm, + is_passthru, in_size); // Do the actual coding or passthru. - if (init_ret == CODER_INIT_NORMAL) - success = coder_normal(pair); - else + if (is_passthru) success = coder_passthru(pair); + else + success = coder_normal(pair); message_progress_end(success); } |