From 83cb73a0452c39cbaf26b0c1d05ed5a219af8d24 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 31 Mar 2023 04:02:23 +0330 Subject: [PATCH] LibCore: Don't assume ArgsParser arguments are non-empty This was fine before as the last entry was a null string (which could be printed), but we no longer use C-style sentinel-terminated arrays for arguments. --- Userland/Libraries/LibCore/ArgsParser.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index 4f1f6f4a0c..30eb89bccb 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -27,13 +27,20 @@ ArgsParser::ArgsParser() bool ArgsParser::parse(Span arguments, FailureBehavior failure_behavior) { - auto fail = [this, name = arguments[0], failure_behavior] { + auto fail_impl = [this, failure_behavior](StringView name) { if (failure_behavior == FailureBehavior::PrintUsage || failure_behavior == FailureBehavior::PrintUsageAndExit) print_usage(stderr, name); if (failure_behavior == FailureBehavior::Exit || failure_behavior == FailureBehavior::PrintUsageAndExit) exit(1); }; + if (arguments.is_empty()) { + fail_impl(""sv); + return false; + } + + auto fail = [name = arguments[0], &fail_impl] { fail_impl(name); }; + OptionParser parser; Vector long_options;