1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-29 14:53:16 +02:00

Interpret absolute paths relative to the root FS rather than the current flake

This commit is contained in:
Eelco Dolstra 2022-10-26 16:33:38 +02:00
parent e2353b9b45
commit 0402dd0298
4 changed files with 27 additions and 3 deletions

View file

@ -472,7 +472,7 @@ EvalState::EvalState(
: std::nullopt,
[](const CanonPath & path) -> RestrictedPathError {
auto modeInformation = evalSettings.pureEval
? "in pure eval mode (use '--impure' to override)"
? "in pure evaluation mode (use '--impure' to override)"
: "in restricted mode";
throw RestrictedPathError("access to absolute path '%1%' is forbidden %2%", path, modeInformation);
}))

View file

@ -508,8 +508,14 @@ string_parts_interpolated
path_start
: PATH {
SourcePath path { data->basePath.accessor, CanonPath({$1.p, $1.l}, data->basePath.path) };
$$ = new ExprPath(std::move(path));
std::string_view path({$1.p, $1.l});
$$ = new ExprPath(
/* Absolute paths are always interpreted relative to the
root filesystem accessor, rather than the accessor of the
current Nix expression. */
hasPrefix(path, "/")
? SourcePath{data->state.rootFS, CanonPath(path)}
: SourcePath{data->basePath.accessor, CanonPath(path, data->basePath.path)});
}
| HPATH {
if (evalSettings.pureEval) {