diff --git a/lib/pure/parseopt.nim b/lib/pure/parseopt.nim index 52c26d5a35..5b57c9a746 100644 --- a/lib/pure/parseopt.nim +++ b/lib/pure/parseopt.nim @@ -588,7 +588,9 @@ proc handleShortOption(p: var OptParser; cmd: string) = template next(): untyped = p.cmds[p.idx + 1] - let canTakeVal = card(p.shortNoVal) > 0 and p.key[0] notin p.shortNoVal + let canTakeVal = card(p.shortNoVal) > 0 and + p.key.len > 0 and p.key[0] notin p.shortNoVal + if i < cmd.len and cmd[i] in p.separators: # separator case if prShortAllowSep in p.rules: diff --git a/tests/misc/tparseopt.nim b/tests/misc/tparseopt.nim index 47be05bac9..eb1eb3c89a 100644 --- a/tests/misc/tparseopt.nim +++ b/tests/misc/tparseopt.nim @@ -31,6 +31,9 @@ cmdShortOption key: v value: '' cmdArgument key: ABC value: '' cmdShortOption key: j value: '4' cmdArgument key: ok value: '' +parseopt stdin +cmdShortOption key: j value: '4' +cmdShortOption key: value: '' ''' joinable: false """ @@ -154,3 +157,9 @@ arg 6 ai.len:4 :{a7'b}""" var n = parseopt.initOptParser("-j4 ok", shortnoVal = {'n'}, longnoVal = @["novalue"]) for kind, key, val in parseopt.getopt(n): echo kind," key: ", key, " value: '", val, "'" + + block: # fix #25738 + echo "parseopt stdin" + var p = parseopt.initOptParser("-j4 -", shortNoVal = {'n'}) + for kind, key, val in parseopt.getopt(p): + echo kind," key: ", key, " value: '", val, "'"