From a54eb317c73422f72487fac33ac7813f7b518e7e Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 15 Jun 2022 18:57:12 -0400 Subject: Fix segfault on empty --env/-E and --sep arguments --- src/main.c | 9 +++++++++ tests/CMakeLists.txt | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/src/main.c b/src/main.c index 98c3529..6d309c8 100644 --- a/src/main.c +++ b/src/main.c @@ -39,6 +39,10 @@ static int is_valid_arg(char **args, char *s) { static char *getenv_ex(char *s) { char *key, *key_end; char *env_var; + if (!s) { + return NULL; + } + key = strdup(s); if (!key) { return NULL; @@ -205,12 +209,17 @@ int main(int argc, char *argv[], char *arge[]) { if (ARGM("--sep") || ARGM("-s")) { i++; sep = argv[i]; + if (!sep) { + fprintf(stderr, "%s requires an argument\n", argv[i - 1]); + exit(1); + } continue; } if (ARGM("--env") || ARGM("-E")) { i++; sys_var = getenv_ex(argv[i]); if (!sys_var) { + fprintf(stderr, "%s requires an argument\n", argv[i - 1]); exit(1); } continue; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9728f72..1f36c0b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,6 +28,8 @@ endforeach() set(TEST_SETUP -E TESTVAR) set(TEST_SETUP_ALL --all) set(TEST_SETUP_ALL_LIST --all-list) +set(TEST_SETUP_BROKEN_E -E) +set(TEST_SETUP_BROKEN_SEP --sep) if(WIN32) set(TEST_SETUP ${TEST_SETUP}_WIN) @@ -54,3 +56,7 @@ add_test(cmd_arg_help ${exec} --help) add_test(cmd_arg_version ${exec} --version) add_test(cmd_arg_list ${exec} --list) add_test(cmd_arg_default ${exec} --default) +add_test(cmd_arg_broken_e ${exec} ${TEST_SETUP_BROKEN_E}) +add_test(cmd_arg_broken_sep ${exec} ${TEST_SETUP_BROKEN_SEP}) + +set_tests_properties(cmd_arg_broken_e cmd_arg_broken_sep PROPERTIES WILL_FAIL TRUE) -- cgit