From 86ee3c4a05fe91e9693324cddbe60beac6dd382a Mon Sep 17 00:00:00 2001 From: Krzysiek Karbowiak Date: Thu, 6 Mar 2025 16:53:05 +0100 Subject: [PATCH 1/3] Add unit test --- test/unittest/test_parsing.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/unittest/test_parsing.cpp b/test/unittest/test_parsing.cpp index 6a7f2c2f..cdc766b9 100644 --- a/test/unittest/test_parsing.cpp +++ b/test/unittest/test_parsing.cpp @@ -163,3 +163,11 @@ TEST_CASE("Parsing") CHECK(args.get_value("opt1") == "o1"); CHECK(!args.get("opt2")); } + +TEST_CASE("Parsing") +{ + auto parser = argparse::ArgumentParser().handle(argparse::Handle::none); + parser.add_argument("pos").nargs(argparse::zero_or_more); + + auto args = parser.parse_args(5, cstr_arr{"prog", "p1", "p2", "--", "p3"}); +} From f82928bf446c4a97b1b77d6590a465cec5939a22 Mon Sep 17 00:00:00 2001 From: Krzysiek Karbowiak Date: Thu, 6 Mar 2025 16:58:19 +0100 Subject: [PATCH 2/3] Fix UB in filter view --- include/argparse.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/argparse.h b/include/argparse.h index d7e23e37..f85bd14e 100644 --- a/include/argparse.h +++ b/include/argparse.h @@ -696,7 +696,7 @@ namespace argparse }) | std::views::filter([&past_pseudo_arg](auto const & token) { - if (past_pseudo_arg) + if (past_pseudo_arg && (token.m_token != "--")) { return true; } From 56e7cdd895c7df87f0df6fd2f61e0971ab9c7fe3 Mon Sep 17 00:00:00 2001 From: Krzysiek Karbowiak Date: Thu, 6 Mar 2025 17:06:56 +0100 Subject: [PATCH 3/3] Extend unit test --- test/unittest/test_parsing.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/unittest/test_parsing.cpp b/test/unittest/test_parsing.cpp index cdc766b9..3f1d29a3 100644 --- a/test/unittest/test_parsing.cpp +++ b/test/unittest/test_parsing.cpp @@ -8,6 +8,8 @@ #include +using namespace std::string_literals; + TEST_CASE("Parsing arguments with help requested disregards parsing errors for missing positional argument") { auto parser = argparse::ArgumentParser().add_help(false).handle(argparse::Handle::none); @@ -170,4 +172,6 @@ TEST_CASE("Parsing") parser.add_argument("pos").nargs(argparse::zero_or_more); auto args = parser.parse_args(5, cstr_arr{"prog", "p1", "p2", "--", "p3"}); + + CHECK(args.get_value>("pos") == std::vector{"p1"s, "p2"s, "p3"s}); }