From dfb5ba0e2c5f5a605be0101fe2bfbd838fc19bc3 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sat, 19 Aug 2023 11:56:32 +0100 Subject: [PATCH] LibCore: Prevent duplicate ArgsParser option names Inspired by #20641, detect when adding an option that its long and short names are both unique. If they are not, print a warning and crash. --- Userland/Libraries/LibCore/ArgsParser.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index 00d3daa649..78a12c9e50 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -388,6 +388,18 @@ void ArgsParser::print_version(FILE* file) void ArgsParser::add_option(Option&& option) { + for (auto const& existing_option : m_options) { + if (option.long_name && existing_option.long_name == option.long_name) { + warnln("Error: Multiple options have the long name \"--{}\"", option.long_name); + dbgln("Error: Multiple options have the long name \"--{}\"", option.long_name); + VERIFY_NOT_REACHED(); + } + if (option.short_name && existing_option.short_name == option.short_name) { + warnln("Error: Multiple options have the short name \"-{}\"", option.short_name); + dbgln("Error: Multiple options have the short name \"-{}\"", option.short_name); + VERIFY_NOT_REACHED(); + } + } m_options.append(move(option)); }