fix(path): check return value of append_path() (#28309)

If the filename passed to vim_FullName() is a relative directory, and
does not exist, it is appended to the current working directory. Since
the return value of append_path() was ignored, and if the buffer length
was too small to fit getcwd() + dirname(filename), it would still try to
append the basename(filename).

This was manifesting as a failure in test/unit/path_spec.lua in:
    itp('fails and uses filename if given filename contains non-existing directory', ..

This failure occurs when running the tests from directory with a short
path such as: /work/src/nv

    test/unit/path_spec.lua:420: Expected objects to be the same.
    Passed in:
    (string) '/work/src/nv/test.file'
    Expected:
    (string) 'non_existing_dir/test.file'

This return value for the second call to append_path() to append
basename(filename) was checked, and this is where it would fail for
normal / longer getcwd()s.
This commit is contained in:
Joey Gouly
2024-04-13 04:25:55 +01:00
committed by GitHub
parent 780509aedf
commit f064e72b9b
3 changed files with 13 additions and 8 deletions

View File

@@ -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.