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`.
This commit is contained in:
parent
ba39006574
commit
fbe186e79d
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user