aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-05-11 00:09:41 +0800
committerJia Tan <jiat0218@gmail.com>2023-07-17 23:34:55 +0800
commitafb2dbec3d857b026486b75e42a4728e12d234cb (patch)
tree030aa945cb78a8255d02222a80364f24d57540a8
parentxz: Allows --block-list filters to scale down memory usage. (diff)
downloadxz-afb2dbec3d857b026486b75e42a4728e12d234cb.tar.xz
xz: Validate --flush-timeout for all specified filter chains.
-rw-r--r--src/xz/coder.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/xz/coder.c b/src/xz/coder.c
index a334e1e2..7cb286b2 100644
--- a/src/xz/coder.c
+++ b/src/xz/coder.c
@@ -376,15 +376,23 @@ coder_set_compression_settings(void)
// from the filter chain. Currently the threaded encoder doesn't
// support LZMA_SYNC_FLUSH so single-threaded mode must be used.
if (opt_mode == MODE_COMPRESS && opt_flush_timeout != 0) {
- for (size_t i = 0; i < filters_count; ++i) {
- switch (default_filters[i].id) {
- case LZMA_FILTER_LZMA2:
- case LZMA_FILTER_DELTA:
- break;
+ for (uint32_t i = 0; i < ARRAY_SIZE(filters); ++i) {
+ if (!(filters_init_mask & (1 << i)))
+ continue;
- default:
- message_fatal(_("The filter chain is "
- "incompatible with --flush-timeout"));
+ const lzma_filter *fc = filters[i];
+ for (size_t j = 0; fc[j].id != LZMA_VLI_UNKNOWN; j++) {
+ switch (fc[j].id) {
+ case LZMA_FILTER_LZMA2:
+ case LZMA_FILTER_DELTA:
+ break;
+
+ default:
+ message_fatal(_("Filter chain %u is "
+ "incompatible with "
+ "--flush-timeout"),
+ (unsigned)i);
+ }
}
}