forked from lix-project/lix
Rebecca Turner
7434caca05
This fixes a segfault on infinite function call recursion (rather than infinite thunk recursion) by tracking the function call depth in `EvalState`. Additionally, to avoid printing extremely long stack traces, stack frames are now deduplicated, with a `(19997 duplicate traces omitted)` message. This should only really be triggered in infinite recursion scenarios. Before: $ nix-instantiate --eval --expr '(x: x x) (x: x x)' Segmentation fault: 11 After: $ nix-instantiate --eval --expr '(x: x x) (x: x x)' error: stack overflow at «string»:1:14: 1| (x: x x) (x: x x) | ^ $ nix-instantiate --eval --expr '(x: x x) (x: x x)' --show-trace error: … from call site at «string»:1:1: 1| (x: x x) (x: x x) | ^ … while calling anonymous lambda at «string»:1:2: 1| (x: x x) (x: x x) | ^ … from call site at «string»:1:5: 1| (x: x x) (x: x x) | ^ … while calling anonymous lambda at «string»:1:11: 1| (x: x x) (x: x x) | ^ … from call site at «string»:1:14: 1| (x: x x) (x: x x) | ^ (19997 duplicate traces omitted) error: stack overflow at «string»:1:14: 1| (x: x x) (x: x x) | ^ |
||
---|---|---|
.. | ||
allowed-uris-can-now-match-whole-schemes.md | ||
cgroup-stats.md | ||
config | ||
eval-system.md | ||
hash-format-nix32.md | ||
ifd-eval-store.md | ||
mounted-ssh-store.md | ||
nix-config-show.md | ||
nix-env-json-drv-path.md | ||
nix-hash-convert.md | ||
nix-profile-names.md | ||
source-positions-in-errors.md | ||
stack-overflow-segfaults.md |