diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index 85caf4aa43..aa344d786c 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -375,7 +375,7 @@ static bool is_executable_in_path(const char *name, char **abspath) // Combine the $PATH segment with `name`. xstrlcpy(buf, p, (size_t)(e - p) + 1); - append_path(buf, name, buf_len); + (void)append_path(buf, name, buf_len); #ifdef MSWIN if (is_executable_ext(buf, abspath)) { diff --git a/src/nvim/path.c b/src/nvim/path.c index 4de18c7530..e3947c54cd 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -2301,7 +2301,9 @@ int path_full_dir_name(char *directory, char *buffer, size_t len) retval = FAIL; } else { xstrlcpy(buffer, old_dir, len); - append_path(buffer, directory, len); + if (append_path(buffer, directory, len) == FAIL) { + retval = FAIL; + } } } else if (os_dirname(buffer, len) == FAIL) { // Do not return immediately since we are in the wrong directory. diff --git a/test/unit/path_spec.lua b/test/unit/path_spec.lua index 8df6a52cd1..44919368bf 100644 --- a/test/unit/path_spec.lua +++ b/test/unit/path_spec.lua @@ -413,12 +413,15 @@ describe('path.c', function() end) itp('fails and uses filename if given filename contains non-existing directory', function() - local filename = 'non_existing_dir/test.file' - local buflen = string.len(filename) + 1 - local do_expand = 1 - local buf, result = vim_FullName(filename, buflen, do_expand) - eq(filename, ffi.string(buf)) - eq(FAIL, result) + -- test with different filename lengths + for rep = 1, 10 do + local filename = ('non_existing_'):rep(rep) .. 'dir/test.file' + local buflen = string.len(filename) + 1 + local do_expand = 1 + local buf, result = vim_FullName(filename, buflen, do_expand) + eq(filename, ffi.string(buf)) + eq(FAIL, result) + end end) itp('concatenates filename if it does not contain a slash', function()