xz: Fix a bug with --files and --files0 in raw mode without a suffix.

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.
This commit is contained in:
Jia Tan 2023-11-17 20:19:26 +08:00
parent 299920bab9
commit 2a732aba22
1 changed files with 5 additions and 0 deletions

View File

@ -840,6 +840,11 @@ args_parse(args_info *args, int argc, char **argv)
if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout
&& (opt_mode == MODE_COMPRESS && (opt_mode == MODE_COMPRESS
|| opt_mode == MODE_DECOMPRESS)) { || 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 // If all of the filenames provided are "-" (more than one
// "-" could be specified) or no filenames are provided, // "-" could be specified) or no filenames are provided,
// then we are only going to be writing to standard out. // then we are only going to be writing to standard out.