aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-11-17 20:19:26 +0800
committerJia Tan <jiat0218@gmail.com>2023-11-17 23:16:55 +0800
commit2a732aba22da1b0d4a1241cb32280ed010ba03ce (patch)
tree88e6daef9c1e8c9e5b913e0f3919625988056c5e
parentTests: Fix typo in a comment. (diff)
downloadxz-2a732aba22da1b0d4a1241cb32280ed010ba03ce.tar.xz
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.
-rw-r--r--src/xz/args.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/xz/args.c b/src/xz/args.c
index cee5f202..8a5ce1f5 100644
--- a/src/xz/args.c
+++ b/src/xz/args.c
@@ -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.