From 6f36b64689796bf89b57eb86265e41dc212968c8 Mon Sep 17 00:00:00 2001 From: Collin Funk Date: Tue, 29 Sep 2026 20:39:02 -0700 Subject: [PATCH] tests: readlink: add tests for the symbolic link infinite loop * tests/readlink/rl-1.sh: Add tests for the 'readlink' invocations that would cause an infinite loop before commit b66f3e4e2 (realpath: fix an infinite loop when resolving symbolic links, 2026-09-25). Also test the behavior without an option, which would not cause the infinite loop. --- tests/readlink/rl-1.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/readlink/rl-1.sh b/tests/readlink/rl-1.sh index 4beffad96..7d2a57355 100755 --- a/tests/readlink/rl-1.sh +++ b/tests/readlink/rl-1.sh @@ -55,4 +55,24 @@ test -z "$v" || fail=1 v=$(returns_ 1 readlink missing) || fail=1 test -z "$v" || fail=1 +# From coreutils 9.0 to 9.12, the following would loop until the +# system ran out of memory. +ln -s loop/a loop || framework_failure_ +vm=$(get_min_ulimit_v_ readlink -f link1) && { + echo 'loop/a' >exp || framework_failure_ + for opt in '' -f -e -m; do + if test -z "$opt"; then + exp=exp + exp_rc=0 + else + exp=/dev/null + exp_rc=1 + fi + (ulimit -v $(($vm+6000)) && + returns_ $exp_rc timeout 10 readlink $opt loop >out 2>err) || fail=1 + compare $exp out || fail=1 + compare /dev/null err || fail=1 + done +} + Exit $fail