瀏覽代碼

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.
Ali Mohammad Pur 2 年之前
父節點
當前提交
83cb73a045
共有 1 個文件被更改,包括 8 次插入1 次删除
  1. 8 1
      Userland/Libraries/LibCore/ArgsParser.cpp

+ 8 - 1
Userland/Libraries/LibCore/ArgsParser.cpp

@@ -27,13 +27,20 @@ ArgsParser::ArgsParser()
 
 bool ArgsParser::parse(Span<StringView> 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("<exe>"sv);
+        return false;
+    }
+
+    auto fail = [name = arguments[0], &fail_impl] { fail_impl(name); };
+
     OptionParser parser;
 
     Vector<OptionParser::Option> long_options;