diff options
author | Jakob Unterwurzacher | 2017-04-29 15:11:17 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2017-04-29 15:11:17 +0200 |
commit | e135a72bda6ffa828e5445a16c349dd7017db282 (patch) | |
tree | 3637aa85f23a6431a014b3664394c437cd54650a | |
parent | edb3e19cb5543c580261052395d461fa47c7cf58 (diff) |
main: "--" should also block "-o" parsing
Includes test cases.
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | cli_args.go | 10 | ||||
-rw-r--r-- | cli_args_test.go | 10 |
3 files changed, 20 insertions, 1 deletions
@@ -162,6 +162,7 @@ v1.3 (in progress) * Use stable 64-bit inode numbers in reverse mode * This may cause problems for very old 32-bit applications that were compiled without Large File Support. +* Passing "--" now also block "-o" parsing v1.2.1, 2017-02-26 * Add an integrated speed test, `gocryptfs -speed` diff --git a/cli_args.go b/cli_args.go index e42d9ae..e8fab75 100644 --- a/cli_args.go +++ b/cli_args.go @@ -36,11 +36,19 @@ var flagSet *flag.FlagSet // prefixOArgs transform options passed via "-o foo,bar" into regular options // like "-foo -bar" and prefixes them to the command line. +// Testcases in TestPrefixOArgs(). func prefixOArgs(osArgs []string) []string { - // Need at least 3, example: gocryptfs -o foo,bar + // Need at least 3, example: gocryptfs -o foo,bar + // ^ 0 ^ 1 ^ 2 if len(osArgs) < 3 { return osArgs } + // Passing "--" disables "-o" parsing. Ignore element 0 (program name). + for _, v := range osArgs[1:] { + if v == "--" { + return osArgs + } + } // Find and extract "-o foo,bar" var otherArgs, oOpts []string for i := 1; i < len(osArgs); i++ { diff --git a/cli_args_test.go b/cli_args_test.go index 8846491..63a33ef 100644 --- a/cli_args_test.go +++ b/cli_args_test.go @@ -12,6 +12,7 @@ type testcase struct { o []string } +// TestPrefixOArgs checks that the "-o x,y,z" parsing works correctly. func TestPrefixOArgs(t *testing.T) { testcases := []testcase{ { @@ -51,6 +52,15 @@ func TestPrefixOArgs(t *testing.T) { i: []string{"gocryptfs", "-o", "rw", "--config", "fff", "ccc", "mmm"}, o: []string{"gocryptfs", "-rw", "--config", "fff", "ccc", "mmm"}, }, + // "--" should also block "-o" parsing. + { + i: []string{"gocryptfs", "foo", "bar", "--", "-o", "a"}, + o: []string{"gocryptfs", "foo", "bar", "--", "-o", "a"}, + }, + { + i: []string{"gocryptfs", "--", "-o", "a"}, + o: []string{"gocryptfs", "--", "-o", "a"}, + }, } for _, tc := range testcases { o := prefixOArgs(tc.i) |