From 73102bddabb369a1e7c02cb9ea9a26ee8ab2bcfc Mon Sep 17 00:00:00 2001 From: lit Date: Sun, 12 Apr 2026 18:32:25 +0800 Subject: [PATCH] fixes #25738; std/parseopt: `-` causes IndexDefect (#25739) (cherry picked from commit cf3c28c2236c77bed267720bce3a5576680dc50b) --- lib/pure/parseopt.nim | 4 +++- tests/misc/tparseopt.nim | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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, "'"