]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
xz: Validate --flush-timeout for all specified filter chains.
authorJia Tan <jiat0218@gmail.com>
Wed, 10 May 2023 16:09:41 +0000 (00:09 +0800)
committerJia Tan <jiat0218@gmail.com>
Mon, 17 Jul 2023 15:34:55 +0000 (23:34 +0800)
src/xz/coder.c

index a334e1e2d5854bb12f033659e8d20e5e9834d1d4..7cb286b26d9ce51a8b1a2d93a43b737aeda7859a 100644 (file)
@@ -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);
+                               }
                        }
                }