]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
xz: Fix a bug with --files and --files0 in raw mode without a suffix.
authorJia Tan <jiat0218@gmail.com>
Fri, 17 Nov 2023 12:19:26 +0000 (20:19 +0800)
committerJia Tan <jiat0218@gmail.com>
Fri, 17 Nov 2023 15:16:55 +0000 (23:16 +0800)
The following command caused a segmentation fault:

    xz -Fraw --lzma1 --files=foo

when foo was a valid file. The usage of --files or --files0 was not
being checked when compressing or decompressing in raw mode without a
suffix. The suffix checking code was meant to validate that all files
to be processed are "-" (if not writing to standard out), meaning the
data is only coming from standard in. In this case, there were no file
names to check since --files and --files0 store their file name in a
different place.

Later code assumed the suffix was set and caused a segmentation fault.
Now, the above command results in an error.

src/xz/args.c

index cee5f20221a94e1c9f8e9fda32c1ec14542af999..8a5ce1f5ac010b36df910f97d4414d80f64cb6fd 100644 (file)
@@ -840,6 +840,11 @@ args_parse(args_info *args, int argc, char **argv)
        if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout
                        && (opt_mode == MODE_COMPRESS
                                || opt_mode == MODE_DECOMPRESS)) {
+               if (args->files_name != NULL)
+                       message_fatal(_("With --format=raw, "
+                                       "--suffix=.SUF is required "
+                                       "unless writing to stdout"));
+
                // If all of the filenames provided are "-" (more than one
                // "-" could be specified) or no filenames are provided,
                // then we are only going to be writing to standard out.