diff options
| author | Lion Kortlepel <[email protected]> | 2026-02-01 09:45:06 +0000 |
|---|---|---|
| committer | Lion Kortlepel <[email protected]> | 2026-02-01 09:45:06 +0000 |
| commit | acf522e7bab50b24ec702b405b4e450b65f835cd (patch) | |
| tree | 5109c3a0c25d054093d95984bb99c92d6da46510 /ls_args.h | |
| parent | b4feabc2c1dccb7212421c8e1edf57db6388a7a3 (diff) | |
| download | args-acf522e7bab50b24ec702b405b4e450b65f835cd.tar.zst args-acf522e7bab50b24ec702b405b4e450b65f835cd.zip | |
fix: fix ls_args_parse segfault on required positional args
Diffstat (limited to 'ls_args.h')
| -rw-r--r-- | ls_args.h | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -576,11 +576,21 @@ int ls_args_parse(ls_args* a, int argc, char** argv) { for (i = 0; i < (int)a->args_len; ++i) { if (a->args[i].mode == LS_ARGS_REQUIRED && !a->args[i].found) { - const size_t len = 64 + strlen(a->args[i].match.name.long_opt); - a->_allocated_error = LS_REALLOC(a->_allocated_error, len); - memset(a->_allocated_error, 0, len); - sprintf(a->_allocated_error, "Required argument '--%s' not found", - a->args[i].match.name.long_opt); + size_t len; + if (a->args[i].is_pos) { + len = 64; + a->_allocated_error = LS_REALLOC(a->_allocated_error, len); + memset(a->_allocated_error, 0, len); + sprintf(a->_allocated_error, "Required positional argument not found (argument %d)", + a->args[i].match.pos); + } else { + len = 64 + strlen(a->args[i].match.name.long_opt); + a->_allocated_error = LS_REALLOC(a->_allocated_error, len); + memset(a->_allocated_error, 0, len); + sprintf(a->_allocated_error, "Required argument '--%s' not found", + a->args[i].match.name.long_opt); + } + a->last_error = a->_allocated_error; return 0; } |
