From 5bd63e0619d10d81850a9993ac278396bb77e36c Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 18 Sep 2020 08:09:09 +0200 Subject: --help: strdup the category ... since it is converted and the original pointer is freed on Windows unicode handling. Follow-up to aa8777f63febc Fixes #5977 Closes #5978 Reported-by: xwxbug on github --- src/tool_getparam.c | 6 +++++- src/tool_help.c | 20 ++++++++------------ src/tool_help.h | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/tool_getparam.c b/src/tool_getparam.c index a884f4b38..7977c3dc6 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -1777,7 +1777,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case 'h': /* h for help */ if(toggle) { - global->help_category = nextarg; + if(nextarg) { + global->help_category = strdup(nextarg); + if(!global->help_category) + return PARAM_NO_MEM; + } return PARAM_HELP_REQUESTED; } /* we now actually support --no-help too! */ diff --git a/src/tool_help.c b/src/tool_help.c index 54a37e6b2..a67e4bc85 100644 --- a/src/tool_help.c +++ b/src/tool_help.c @@ -899,35 +899,31 @@ static void get_categories(void) } -void tool_help(const char *category) +void tool_help(char *category) { puts("Usage: curl [options...] "); /* If no category was provided */ if(!category) { const char *category_note = "\nThis is not the full help, this " - "menu is stripped into categories.\nUse \"--help category\" to get " - "an overview of all categories.\nFor all options use the manual" - " or \"--help all\"."; + "menu is stripped into categories.\nUse \"--help category\" to get " + "an overview of all categories.\nFor all options use the manual" + " or \"--help all\"."; print_category(CURLHELP_IMPORTANT); puts(category_note); - return; } /* Lets print everything if "all" was provided */ - if(curl_strequal(category, "all")) { + else if(curl_strequal(category, "all")) /* Print everything except hidden */ print_category(~(CURLHELP_HIDDEN)); - return; - } /* Lets handle the string "category" differently to not print an errormsg */ - if(curl_strequal(category, "category")) { + else if(curl_strequal(category, "category")) get_categories(); - return; - } /* Otherwise print category and handle the case if the cat was not found */ - if(get_category_content(category)) { + else if(get_category_content(category)) { puts("Invalid category provided, here is a list of all categories:\n"); get_categories(); } + free(category); } static int diff --git a/src/tool_help.h b/src/tool_help.h index 536ac10f8..1da23cc54 100644 --- a/src/tool_help.h +++ b/src/tool_help.h @@ -23,7 +23,7 @@ ***************************************************************************/ #include "tool_setup.h" -void tool_help(const char *category); +void tool_help(char *category); void tool_list_engines(void); void tool_version_info(void); -- cgit v1.2.1