From 2470db02c5136525b8abce1ee0889d94f8d81d98 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 24 Jan 2025 08:52:55 +0800 Subject: vim-patch:partial:9.1.1050: too many strlen() calls in os_unix.c (#32188) Problem: too many strlen() calls in os_unix.c Solution: refactor os_unix.c and remove calls to strlen() (John Marriott) closes: vim/vim#16496 https://github.com/vim/vim/commit/efc41a5958bf25b352e0916af5f57dafbbb44f17 Omit os_expand_wildcards() change: Nvim's code is more complicated and harder to refactor. Co-authored-by: John Marriott --- src/nvim/path.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/nvim/path.c') diff --git a/src/nvim/path.c b/src/nvim/path.c index 1ebc318809..08a63eacd0 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -1875,11 +1875,12 @@ void path_fix_case(char *name) return; } + size_t taillen = strlen(tail); const char *entry; while ((entry = os_scandir_next(&dir))) { // Only accept names that differ in case and are the same byte // length. TODO: accept different length name. - if (STRICMP(tail, entry) == 0 && strlen(tail) == strlen(entry)) { + if (STRICMP(tail, entry) == 0 && taillen == strlen(entry)) { char newname[MAXPATHL + 1]; // Verify the inode is equal. @@ -2270,14 +2271,12 @@ int append_path(char *path, const char *to_append, size_t max_len) // Combine the path segments, separated by a slash. if (current_length > 0 && !vim_ispathsep_nocolon(path[current_length - 1])) { - current_length += 1; // Count the trailing slash. - // +1 for the NUL at the end. - if (current_length + 1 > max_len) { - return FAIL; + if (current_length + STRLEN_LITERAL(PATHSEPSTR) + 1 > max_len) { + return FAIL; // No space for trailing slash. } - - xstrlcat(path, PATHSEPSTR, max_len); + xstrlcpy(path + current_length, PATHSEPSTR, max_len - current_length); + current_length += STRLEN_LITERAL(PATHSEPSTR); } // +1 for the NUL at the end. @@ -2285,7 +2284,7 @@ int append_path(char *path, const char *to_append, size_t max_len) return FAIL; } - xstrlcat(path, to_append, max_len); + xstrlcpy(path + current_length, to_append, max_len - current_length); return OK; } -- cgit