Fix panic on 'mlr sort -n' (#1004)

This commit is contained in:
John Kerl 2022-03-28 23:33:28 -04:00 committed by GitHub
parent 0bc67485b8
commit e271b55832
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 2 deletions

View file

@ -15,7 +15,7 @@ import (
// For flags with values, e.g. ["-n" "10"], while we're looking at the "-n" this let us see if the "10" slot exists.
// The verb is nominally something from a ways earlier in args[]; the opt is nominally what's at args[argi-1].
// So this function should be called with args[argi] pointing to the "10" slot.
func verbCheckArgCount(verb string, opt string, args []string, argi int, argc int, n int) {
func VerbCheckArgCount(verb string, opt string, args []string, argi int, argc int, n int) {
if (argc - argi) < n {
fmt.Fprintf(os.Stderr, "%s %s: option \"%s\" missing argument(s).\n",
"mlr", verb, opt,
@ -26,7 +26,7 @@ func verbCheckArgCount(verb string, opt string, args []string, argi int, argc in
// E.g. with ["-f", "a,b,c"], makes sure there is something in the "a,b,c" position, and returns it.
func VerbGetStringArgOrDie(verb string, opt string, args []string, pargi *int, argc int) string {
verbCheckArgCount(verb, opt, args, *pargi, argc, 1)
VerbCheckArgCount(verb, opt, args, *pargi, argc, 1)
retval := args[*pargi]
*pargi += 1
return retval

View file

@ -138,6 +138,7 @@ func transformerSortParseCLI(
// See comments over "-n" -- similar hack.
if args[argi] == "-r" {
// Treat like "-cr"
cli.VerbCheckArgCount(verb, args[argi], args, argi, argc, 1)
argi++
subList := cli.VerbGetStringArrayArgOrDie(verb, "-nr", args, &argi, argc)
for _, item := range subList {
@ -155,8 +156,10 @@ func transformerSortParseCLI(
} else if opt == "-t" {
// See comments over "-n" -- similar hack.
cli.VerbCheckArgCount(verb, opt, args, argi, argc, 1)
if args[argi] == "-r" {
// Treat like "-tr"
cli.VerbCheckArgCount(verb, args[argi], args, argi, argc, 1)
argi++
subList := cli.VerbGetStringArrayArgOrDie(verb, "-tr", args, &argi, argc)
for _, item := range subList {
@ -202,6 +205,7 @@ func transformerSortParseCLI(
// So here we special-case this: if "-n" is followed immediately by
// "-f", we treat it the same as "-nf". Likewise, "-n" followed by
// "-r" is treated like "-nr".
cli.VerbCheckArgCount(verb, opt, args, argi, argc, 1)
if args[argi] == "-f" {
// Treat like "-nf"