From acf522e7bab50b24ec702b405b4e450b65f835cd Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Sun, 1 Feb 2026 09:45:06 +0000 Subject: fix: fix ls_args_parse segfault on required positional args --- ls_args.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'ls_args.h') diff --git a/ls_args.h b/ls_args.h index 1c9301a..a02b3d1 100644 --- a/ls_args.h +++ b/ls_args.h @@ -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; } -- cgit