summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2020-09-18 08:09:09 +0200
committerDaniel Stenberg <daniel@haxx.se>2020-09-18 14:47:23 +0200
commit5bd63e0619d10d81850a9993ac278396bb77e36c (patch)
tree3fe1e3986f8df5eb3f81b7d8225d86bffc2051f5
parent2df7414a7390771316be4cc8822650470e7d7aa8 (diff)
downloadcurl-5bd63e0619d10d81850a9993ac278396bb77e36c.tar.gz
--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
-rw-r--r--src/tool_getparam.c6
-rw-r--r--src/tool_help.c20
-rw-r--r--src/tool_help.h2
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...] <url>");
/* 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);