File 6142-stdlib-Fix-argparse-format_help-2-crash-on-hidden-co.patch of Package erlang

From b2b2331dbde34d50db60ad5875e6c61959e94c47 Mon Sep 17 00:00:00 2001
From: Stefan Grundmann <sg2342@googlemail.com>
Date: Fri, 6 Dec 2024 03:30:17 +0000
Subject: [PATCH] stdlib: Fix argparse:format_help/2 crash on 'hidden' command

Fixes #9150
---
 lib/stdlib/src/argparse.erl        |  2 ++
 lib/stdlib/test/argparse_SUITE.erl | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/lib/stdlib/src/argparse.erl b/lib/stdlib/src/argparse.erl
index c39302ef03..932816fae4 100644
--- a/lib/stdlib/src/argparse.erl
+++ b/lib/stdlib/src/argparse.erl
@@ -1680,6 +1680,8 @@ collect_options(CmdName, Command, [Cmd|Tail], Args) ->
     collect_options(CmdName ++ " " ++ Cmd, SubCmd, Tail, Args ++ maps:get(arguments, Command, [])).
 
 %% gets help for sub-command
+get_help(#{help := hidden}, []) ->
+    "";
 get_help(Command, []) ->
     case maps:get(help, Command, "") of
         Help when is_binary(Help) -> unicode:characters_to_list(Help);
diff --git a/lib/stdlib/test/argparse_SUITE.erl b/lib/stdlib/test/argparse_SUITE.erl
index 3c67a6d0c8..47d2ddeb28 100644
--- a/lib/stdlib/test/argparse_SUITE.erl
+++ b/lib/stdlib/test/argparse_SUITE.erl
@@ -828,6 +828,22 @@ usage(Config) when is_list(Config) ->
         "  ---extra    extra option very deep\n",
     ?assertEqual(CrawlerStatus, unicode:characters_to_list(argparse:help(Cmd,
         #{progname => "erl", command => ["erl", "status", "crawler"]}))),
+    RestartCmd = "Usage:\n  erl restart [-rfv] [--force] [-i <interval>] [--req <weird>] [--float <float>]\n"
+        "      [-d <duo>] [--duo <duo>] <server>\n"
+        "\n"
+        "Arguments:\n"
+        "  server      server to restart\n"
+        "\n"
+        "Optional arguments:\n"
+        "  -r          recursive\n"
+        "  -f, --force force\n"
+        "  -v          verbosity level\n"
+        "  -i          interval set (int >= 1)\n"
+        "  --req       required optional, right?\n"
+        "  --float     floating-point long form argument (float), default: 3.14\n"
+        "  -d, --duo   dual option\n",
+    ?assertEqual(RestartCmd, unicode:characters_to_list(argparse:help(Cmd,
+        #{progname => "erl", command => ["restart"]}))),
     ok.
 
 usage_help_binary() ->
-- 
2.43.0

openSUSE Build Service is sponsored by