Look for full command names instead of substrings
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 10 Jul 2009 08:33:21 +0000 (11:33 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 10 Jul 2009 08:33:21 +0000 (11:33 +0300)
like "un", "cat", and "lz" when determining if
xz is run as unxz, xzcat, lzma, unlzma, or lzcat.

This is to ensure that if xz is renamed (e.g. via
--program-transform-name), it doesn't so easily
work in wrong mode.

src/xz/args.c

index 97b2244..8d5d33c 100644 (file)
@@ -465,19 +465,23 @@ args_parse(args_info *args, int argc, char **argv)
                // NOTE: It's possible that name[0] is now '\0' if argv[0]
                // is weird, but it doesn't matter here.
 
-               // If the command name contains "lz",
-               // it implies --format=lzma.
-               if (strstr(name, "lz") != NULL)
+               // Look for full command names instead of substrings like
+               // "un", "cat", and "lz" to reduce possibility of false
+               // positives when the programs have been renamed.
+               if (strstr(name, "xzcat") != NULL) {
+                       opt_mode = MODE_DECOMPRESS;
+                       opt_stdout = true;
+               } else if (strstr(name, "unxz") != NULL) {
+                       opt_mode = MODE_DECOMPRESS;
+               } else if (strstr(name, "lzcat") != NULL) {
                        opt_format = FORMAT_LZMA;
-
-               // Operation mode
-               if (strstr(name, "cat") != NULL) {
-                       // Imply --decompress --stdout
                        opt_mode = MODE_DECOMPRESS;
                        opt_stdout = true;
-               } else if (strstr(name, "un") != NULL) {
-                       // Imply --decompress
+               } else if (strstr(name, "unlzma") != NULL) {
+                       opt_format = FORMAT_LZMA;
                        opt_mode = MODE_DECOMPRESS;
+               } else if (strstr(name, "lzma") != NULL) {
+                       opt_format = FORMAT_LZMA;
                }
        }