From fbe186e79d2083a7bbd1588b317cd5782bc5ae73 Mon Sep 17 00:00:00 2001 From: NRK Date: Thu, 16 Jun 2022 19:33:32 +0600 Subject: [PATCH] don't assume positive argc handle a rare, but possible case of argc being 0, in which case argv[0] would be null. note that both POSIX and ISO C standard allow argc to be 0 and in practice this can be triggered via calling `exec(3)` family of functions with NULL as the first `argv`. --- options.c | 8 +++++--- util.c | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/options.c b/options.c index 8e8baa7..c94c9be 100644 --- a/options.c +++ b/options.c @@ -98,9 +98,6 @@ void parse_options(int argc, char **argv) static opt_t _options; options = &_options; - progname = strrchr(argv[0], '/'); - progname = progname ? progname + 1 : argv[0]; - _options.from_stdin = false; _options.to_stdout = false; _options.using_null = false; @@ -125,6 +122,11 @@ void parse_options(int argc, char **argv) _options.clean_cache = false; _options.private_mode = false; + if (argc > 0) { + s = strrchr(argv[0], '/'); + progname = s != NULL && s[1] != '\0' ? s + 1 : argv[0]; + } + optparse_init(&op, argv); while ((opt = optparse_long(&op, longopts, NULL)) != -1) { for (n = 0; n < (int)ARRLEN(longopts); ++n) { /* clang-tidy finds some non-sensical branch and thinks optarg == NULL is possible */ diff --git a/util.c b/util.c index f03fe23..8b164ed 100644 --- a/util.c +++ b/util.c @@ -28,7 +28,7 @@ #include #include -const char *progname; +const char *progname = "nsxiv"; void* emalloc(size_t size) {