jessevdk/go-flags

Omitting a hyphen from long-arguments doesn't fail with extra arguments as it should

dsoprea opened this issue · 0 comments

This is my argument configuration:

type parameters struct {
	Filepath                string `short:"f" long:"filepath" required:"true" description:"File-path of image"`
	PrintAsJson             bool   `short:"j" long:"json" description:"Print out as JSON"`
	IsVerbose               bool   `short:"v" long:"verbose" description:"Print logging"`
	ThumbnailOutputFilepath string `short:"t" long:"thumbnail-output-filepath" description:"File-path to write thumbnail to (if present)"`
	DoNotPrintTags          bool   `short:"n" long:"no-tags" description:"Do not actually print tags. Good for auditing the logs or merely checking the EXIF structure for errors."`
	SkipBlocks              int    `short:"s" long:"skip" description:"Skip this many EXIF blocks before returning"`
	DoUniversalTagSearch    bool   `short:"u" long:"universal-tags" description:"If tags not found in known mapped IFDs, fallback to trying all IFDs."`
}

var (
	arguments = new(parameters)
)

...

func main() {

...

	_, err := flags.Parse(arguments)
	if err != nil {
		os.Exit(-1)
	}

...
}

If you accidentally pass -filepath instead of --filepath, two things should happen: 1) 'ilepath' should be taken as the argument and go-flags should fail due to the provided argument now being an extra. However, it parses successfully and returned control to the caller, just to fail due to it being an invalid file-path.

Both of these have the same result:

$ go run command/exif-read-tool/main.go -filepath 
Stack:

*fs.PathError open ilepath: no such file or directory
/home/dustin/go/src/github.com/dsoprea/go-exif/v3/command/exif-read-tool/main.go:92 (0x5cb7f7)
	main: log.PanicIf(err)
/usr/local/go/src/runtime/proc.go:225 (0x437cb6)
	main: fn()
/usr/local/go/src/runtime/asm_amd64.s:1371 (0x468041)
	goexit: BYTE	$0x90	// NOP

exit status 254

$ go run command/exif-read-tool/main.go -filepath assets/gps.jpg
Stack:

*fs.PathError open ilepath: no such file or directory
/home/dustin/go/src/github.com/dsoprea/go-exif/v3/command/exif-read-tool/main.go:92 (0x5cb7f7)
	main: log.PanicIf(err)
/usr/local/go/src/runtime/proc.go:225 (0x437cb6)
	main: fn()
/usr/local/go/src/runtime/asm_amd64.s:1371 (0x468041)
	goexit: BYTE	$0x90	// NOP

exit status 254

REF: dsoprea/go-exif#61