fixed crash on unknown long option

This commit is contained in:
mpeterv
2014-01-19 14:34:42 +04:00
parent 0e367c6f77
commit f7a0703e73
2 changed files with 13 additions and 4 deletions

View File

@@ -181,6 +181,14 @@ describe("tests related to options", function()
assert.has_error(function() parser:parse{"--server"} end, "too few arguments")
end)
it("handles unknown options correctly", function()
local parser = argparse.parser()
assert.has_error(function() parser:parse{"--server"} end, "unknown option --server")
assert.has_error(function() parser:parse{"--server=localhost"} end, "unknown option --server")
assert.has_error(function() parser:parse{"-s"} end, "unknown option -s")
assert.has_error(function() parser:parse{"-slocalhost"} end, "unknown option -s")
end)
it("handles too many arguments correctly", function()
local parser = argparse.parser()
parser:option("-s", "--server")

View File

@@ -320,7 +320,7 @@ function Parser:parse(args)
if not com then
if #commands > 0 then
parser:error("wrong command") -- add lev-based guessing here
parser:error("unknown command %s", data) -- add lev-based guessing here
else
parser:error("too many arguments")
end
@@ -356,7 +356,7 @@ function Parser:parse(args)
for i = 2, #data do
name = first .. data:sub(i, i)
option = parser:assert(opt_context[name], "unknown option " .. name)
option = parser:assert(opt_context[name], "unknown option %s", name)
handle_option(name)
if i ~= #data and option.minargs > 0 then
@@ -374,12 +374,13 @@ function Parser:parse(args)
local equal = data:find "="
if equal then
name = data:sub(1, equal-1)
option = parser:assert(opt_context[name], "unknown option " .. name)
parser:assert(option.maxargs > 0, "option " .. name .. " doesn't take arguments")
option = parser:assert(opt_context[name], "unknown option %s", name)
parser:assert(option.maxargs > 0, "option %s doesn't take arguments", name)
handle_option(data:sub(1, equal-1))
handle_argument(data:sub(equal+1))
else
parser:assert(opt_context[data], "unknown option %s", data)
handle_option(data)
end
end