]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfsprogs: fix silently broken option parsing
authorDave Chinner <dchinner@redhat.com>
Wed, 8 Apr 2020 13:48:04 +0000 (09:48 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 8 Apr 2020 13:48:04 +0000 (09:48 -0400)
When getopt() is passed an option string like "-m -n" and the
parameter m is defined as "m:", getopt returns a special error
to indication that the optstring started with a "-". Any getopt()
caller that is just catching the "?" error character will not
not catch this special error, so it silently eats the parameter
following -m.

Lots of getopt loops in xfsprogs have this issue. Convert them all
to just use a "default:" to catch anything unexpected.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
copy/xfs_copy.c
db/freesp.c
db/init.c
growfs/xfs_growfs.c
io/copy_file_range.c
logprint/logprint.c
mkfs/xfs_mkfs.c
repair/xfs_repair.c
scrub/xfs_scrub.c
spaceman/freesp.c
spaceman/prealloc.c

index 91c2ae01683b7571a3063a8a16789f3ef9da70fc..c4f9f34981ca9ab27c5c27afe3fd38f5ef57bf84 100644 (file)
@@ -584,7 +584,7 @@ main(int argc, char **argv)
                case 'V':
                        printf(_("%s version %s\n"), progname, VERSION);
                        exit(0);
-               case '?':
+               default:
                        usage();
                }
        }
index 903c60d7380a181dde01036ffe95fa2706e82dd5..6f234666584706044e91b0552963a0150529a414 100644 (file)
@@ -177,7 +177,7 @@ init(
                case 's':
                        summaryflag = 1;
                        break;
-               case '?':
+               default:
                        return usage();
                }
        }
index 61eea111f017c65bfc9fd1ae7750ec8894ca766a..ac649fbddbb9d29a3299d44c6249d66be6c4b134 100644 (file)
--- a/db/init.c
+++ b/db/init.c
@@ -84,15 +84,12 @@ init(
                case 'V':
                        printf(_("%s version %s\n"), progname, VERSION);
                        exit(0);
-               case '?':
+               default:
                        usage();
-                       /*NOTREACHED*/
                }
        }
-       if (optind + 1 != argc) {
+       if (optind + 1 != argc)
                usage();
-               /*NOTREACHED*/
-       }
 
        fsdevice = argv[optind];
        if (!x.disfile)
index d27e3b94e0c46c06b85d95f4432d85bdf7dc8975..a68b515de40db5a475a0dbb1fd89ea37eaf5781d 100644 (file)
@@ -120,7 +120,6 @@ main(int argc, char **argv)
                case 'V':
                        printf(_("%s version %s\n"), progname, VERSION);
                        exit(0);
-               case '?':
                default:
                        usage();
                }
index fb5702e1faad8b355c7d5fa447e5aabd9e71f6bf..4c4332c6e5eccb04b0da8b5f39c1fc79e1e80780 100644 (file)
@@ -127,6 +127,8 @@ copy_range_f(int argc, char **argv)
                        /* Expect no src_path arg */
                        src_path_arg = 0;
                        break;
+               default:
+                       return command_usage(&copy_range_cmd);
                }
        }
 
index 511a32aca726b3c5ff558b0013bf599f2361c4ed..e882c5d44397bfa5071f27be90ad77b8fae7f792 100644 (file)
@@ -193,7 +193,7 @@ main(int argc, char **argv)
                        case 'V':
                                printf(_("%s version %s\n"), progname, VERSION);
                                exit(0);
-                       case '?':
+                       default:
                                usage();
                }
        }
index f14ce8db5a74906cefa0d2509762e2c971c7b812..039b1dcc5afa5ff895f587ebea8960528031a2a3 100644 (file)
@@ -3679,7 +3679,7 @@ main(
                case 'V':
                        printf(_("%s version %s\n"), progname, VERSION);
                        exit(0);
-               case '?':
+               default:
                        unknown(optopt, "");
                }
        }
index 4d37ddc64906231e98f714713ba5da4563627813..e509fdeb66fe0e2b4d135e3fa0b662db9933bf32 100644 (file)
@@ -326,7 +326,7 @@ process_args(int argc, char **argv)
                case 'e':
                        report_corrected = true;
                        break;
-               case '?':
+               default:
                        usage();
                }
        }
index 014c54dd76b24dd914f4f0fb5198b74277dfe9d9..33b876f2147ab2924b136a59f302ae52f5c1d25d 100644 (file)
@@ -671,8 +671,6 @@ main(
                case 'x':
                        scrub_data = true;
                        break;
-               case '?':
-                       /* fall through */
                default:
                        usage();
                }
index 92cdb7439427eccd12203bf195c8249899fec14c..de301c195fb3b476073e65663e3d574f464e9a33 100644 (file)
@@ -310,7 +310,6 @@ init(
                case 's':
                        summaryflag = 1;
                        break;
-               case '?':
                default:
                        return command_usage(&freesp_cmd);
                }
index e5d857bdd3345d54ee5efa7f23ba778935e43f0c..6fcbb461125b2f4fa68fda96bd07fed4df8a35db 100644 (file)
@@ -56,7 +56,6 @@ prealloc_f(
                        eofb.eof_min_file_size = cvtnum(fsgeom->blocksize,
                                        fsgeom->sectsize, optarg);
                        break;
-               case '?':
                default:
                        return command_usage(&prealloc_cmd);
                }