From e3185850213b64fa6d93546e5b6b466fd14eb4e7 Mon Sep 17 00:00:00 2001 From: Fabian Boehm Date: Thu, 28 Dec 2023 10:18:00 +0100 Subject: [PATCH] Don't replace tilde for error messages if we have no $HOME This was an issue with "--no-execute", which has no variables and therefore no $HOME: ```fish fish --no-execute /path/to/file ``` would say the error is in `~/path/to/file`. Instead, since this is just for a message, we simply return the filename without doing the replacement. Fixes #10171 --- fish-rust/src/expand.rs | 5 +++++ tests/checks/no-execute.fish | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/fish-rust/src/expand.rs b/fish-rust/src/expand.rs index 7359899d3..60c8aba5b 100644 --- a/fish-rust/src/expand.rs +++ b/fish-rust/src/expand.rs @@ -307,6 +307,11 @@ pub fn replace_home_directory_with_tilde(s: &wstr, vars: &dyn Environment) -> WS if result.starts_with("/"L) { let mut home_directory = "~"L.to_owned(); expand_tilde(&mut home_directory, vars); + // If we can't get a home directory, don't replace anything. + // This is the case e.g. with --no-execute + if home_directory.is_empty() { + return result; + } if !home_directory.ends_with("/"L) { home_directory.push('/'); } diff --git a/tests/checks/no-execute.fish b/tests/checks/no-execute.fish index 93241c58a..1e5f54e01 100644 --- a/tests/checks/no-execute.fish +++ b/tests/checks/no-execute.fish @@ -23,5 +23,14 @@ echo "begin; echo oops" | $fish -n echo $status #CHECK: 127 +echo "begin" > broken +$fish -n $PWD/broken +#CHECKERR: /{{.*}}broken (line 1): Missing end to balance this begin +#CHECKERR: begin +#CHECKERR: ^~~~^ +#CHECKERR: warning: Error while reading file /{{.*}}broken + +rm broken + # Littlecheck assumes a status of 127 means the shebang was invalid. exit 0