mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 23:36:16 +02:00
Detect symlink cycles
This commit is contained in:
parent
593798b2a0
commit
df713a5d25
2 changed files with 8 additions and 0 deletions
|
@ -289,10 +289,14 @@ SourcePath SourcePath::resolveSymlinks() const
|
|||
{
|
||||
CanonPath res("/");
|
||||
|
||||
int linksAllowed = 1024;
|
||||
|
||||
for (auto & component : path) {
|
||||
res.push(component);
|
||||
while (true) {
|
||||
if (auto st = accessor.maybeLstat(res)) {
|
||||
if (!linksAllowed--)
|
||||
throw Error("infinite symlink recursion in path '%s'", path);
|
||||
if (st->type != InputAccessor::tSymlink) break;
|
||||
auto target = accessor.readLink(res);
|
||||
if (hasPrefix(target, "/"))
|
||||
|
|
|
@ -29,3 +29,7 @@ nix-instantiate --eval -E 'assert 1 + 2 == 3; true'
|
|||
[[ $(nix-instantiate -A attr --eval "./eval.nix") == '{ foo = "bar"; }' ]]
|
||||
[[ $(nix-instantiate -A attr --eval --json "./eval.nix") == '{"foo":"bar"}' ]]
|
||||
[[ $(nix-instantiate -A int --eval - < "./eval.nix") == 123 ]]
|
||||
|
||||
# Check that symlink cycles don't cause a hang.
|
||||
ln -sfn cycle.nix $TEST_ROOT/cycle.nix
|
||||
(! nix eval --file $TEST_ROOT/cycle.nix)
|
||||
|
|
Loading…
Reference in a new issue