From 87b42e12095aa629b0aa02f25b05cf5de5f2bbad Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 28 Jun 2026 19:01:24 -0400 Subject: build: lint "strtol" #40442 Problem: No lint for strtol(). Solution: Add lint, and update existing usages. Callers that previously got a (garbage) large positive value: - `indent.c`: use getdigits() (intmax, no int truncation) with def=1 so overflow/too-large values stay positive and fall through to the existing "too big" check (E475). - `file_search.c`: use getdigits() with def=255 so overflow/too-large values keep the "max expand" (else) branch. The other conversions (api/command.c, eval/window.c, highlight_group.c, tui/tui.c) only diverge on pathological overflow inputs where strtol's result was already garbage and the observable outcome is unchanged. --- src/nvim/api/command.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/nvim/api/command.c') diff --git a/src/nvim/api/command.c b/src/nvim/api/command.c index cfe87cd641..30cc88ee4a 100644 --- a/src/nvim/api/command.c +++ b/src/nvim/api/command.c @@ -463,8 +463,8 @@ String nvim_cmd(uint64_t channel_id, Dict(cmd) *cmd, Dict(cmd_opts) *opts, Arena count_value = first_arg.data.integer; } else if (first_arg.type == kObjectTypeString) { // Try to parse string as a number Example: vim.api.nvim_cmd({cmd = 'copen', args = {'10'}}, {}) - char *endptr; - long val = strtol(first_arg.data.string.data, &endptr, 10); + char *endptr = first_arg.data.string.data; + long val = getdigits_long(&endptr, false, 0); // Check if entire string was consumed (valid number) and string is not empty if (*endptr == '\0' && first_arg.data.string.size > 0) { is_numeric = true; -- cgit