From 6b23b2d7df090dc792f42b451e6e6160a4854580 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Sat, 1 Jun 2019 01:44:08 -0700 Subject: [PATCH] parseopt fix (#11363) [backport] --- lib/pure/parseopt.nim | 3 ++- tests/misc/tparseopt.nim | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/pure/parseopt.nim b/lib/pure/parseopt.nim index baa46c65a6..97b3fd51dc 100644 --- a/lib/pure/parseopt.nim +++ b/lib/pure/parseopt.nim @@ -348,7 +348,8 @@ proc next*(p: var OptParser) {.rtl, extern: "npo$1".} = if i >= p.cmds[p.idx].len and p.idx < p.cmds.len and p.allowWhitespaceAfterColon: inc p.idx i = 0 - p.val = TaintedString p.cmds[p.idx].substr(i) + if p.idx < p.cmds.len: + p.val = TaintedString p.cmds[p.idx].substr(i) elif len(p.longNoVal) > 0 and p.key.string notin p.longNoVal and p.idx+1 < p.cmds.len: p.val = TaintedString p.cmds[p.idx+1] inc p.idx diff --git a/tests/misc/tparseopt.nim b/tests/misc/tparseopt.nim index b5da6b572a..25ce778169 100644 --- a/tests/misc/tparseopt.nim +++ b/tests/misc/tparseopt.nim @@ -21,6 +21,7 @@ kind: cmdShortOption key:val -- r:1 kind: cmdShortOption key:val -- r:0 kind: cmdShortOption key:val -- l: kind: cmdShortOption key:val -- r:4 +kind: cmdLongOption key:val -- debug: ''' joinable: false """ @@ -62,7 +63,7 @@ else: block: echo "parseoptNoVal" # test NoVal mode with custom cmdline arguments - var argv = "--left --debug:3 -l -r:2 --debug 2 --debug=1 -r1 -r=0 -lr4" + var argv = "--left --debug:3 -l -r:2 --debug 2 --debug=1 -r1 -r=0 -lr4 --debug:" var p = parseopt.initOptParser(argv, shortNoVal = {'l'}, longNoVal = @["left"]) for kind, key, val in parseopt.getopt(p):