Don't crash if CDPATH is "./"

Fixes #5887.
This commit is contained in:
Fabian Homborg
2019-05-22 21:46:53 +02:00
parent 363652ad76
commit 1faffa515e
3 changed files with 10 additions and 1 deletions

View File

@@ -179,9 +179,14 @@ maybe_t<wcstring> path_get_cdpath(const wcstring &dir, const wcstring &wd,
if (next_path.empty()) next_path = L".";
if (next_path == L"." && !wd.empty()) {
// next_path is just '.', and we have a working directory, so use the wd instead.
// TODO: if next_path starts with ./ we need to replace the . with the wd.
next_path = wd;
}
// If next_path starts with ./ we need to replace the . with the wd.
if (string_prefixes_string(L"./", next_path) && !wd.empty()) {
next_path = next_path.replace(0, 2, wd);
}
expand_tilde(next_path, env_vars);
if (next_path.empty()) continue;

View File

@@ -72,6 +72,9 @@ cd $base
test $PWD = $base; and echo Gone to base
cd linkhome
test $PWD = $base/linkhome; and echo Gone to linkhome via implicit . in CDPATH
set -g CDPATH ./
cd $base
test $PWD = $base; and echo No crash with ./ CDPATH
# cd back before removing the test directory again.
cd $oldpwd

View File

@@ -29,3 +29,4 @@ BogusPWD test 2 succeeded
Gone to linkhome via CDPATH
Gone to base
Gone to linkhome via implicit . in CDPATH
No crash with ./ CDPATH