mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-29 13:23:53 +08:00
parser: Stop crashing when cwd isn't readable
Everything seems to be working, so instead of crashing just print an error and return. Fixes #6597
This commit is contained in:
parent
56040d2d7f
commit
ceba851d44
|
@ -85,7 +85,7 @@ parser_t::parser_t(std::shared_ptr<env_stack_t> vars) : variables(std::move(vars
|
||||||
int cwd = open_cloexec(".", O_RDONLY);
|
int cwd = open_cloexec(".", O_RDONLY);
|
||||||
if (cwd < 0) {
|
if (cwd < 0) {
|
||||||
perror("Unable to open the current working directory");
|
perror("Unable to open the current working directory");
|
||||||
abort();
|
return;
|
||||||
}
|
}
|
||||||
libdata().cwd_fd = std::make_shared<const autoclose_fd_t>(cwd);
|
libdata().cwd_fd = std::make_shared<const autoclose_fd_t>(cwd);
|
||||||
}
|
}
|
||||||
|
|
17
tests/checks/init-unreadable-cwd.fish
Normal file
17
tests/checks/init-unreadable-cwd.fish
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#RUN: %fish -C 'set -g fish %fish' %s
|
||||||
|
# Test that fish doesn't crash if cwd is unreadable at the start (#6597)
|
||||||
|
|
||||||
|
set -l oldpwd $PWD
|
||||||
|
set -l tmpdir (mktemp -d)
|
||||||
|
|
||||||
|
# $fish might be a relative path (e.g. "../test/root/bin/fish")
|
||||||
|
set -l fish (builtin realpath $fish)
|
||||||
|
cd $tmpdir
|
||||||
|
chmod 000 .
|
||||||
|
$fish -c 'echo Look Ma! No crashing!'
|
||||||
|
#CHECK: Look Ma! No crashing!
|
||||||
|
#CHECKERR: Unable to open the current working directory: Permission denied
|
||||||
|
|
||||||
|
# Careful here, Solaris' rm tests if the directory is in $PWD, so we need to cd back
|
||||||
|
cd $oldpwd
|
||||||
|
rmdir $tmpdir
|
Loading…
Reference in New Issue
Block a user