From 286bd5549ab5b3e7ef769310152460dda77b27d1 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Sat, 21 Mar 2020 18:40:37 +0000 Subject: [PATCH 1/8] Add tests for the segfault on resolving a symlink loop bug (workers/45282). This is workers/45377, extended. --- Test/D02glob.ztst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Test/D02glob.ztst b/Test/D02glob.ztst index 4e6dc2a7a..248cc7ff5 100644 --- a/Test/D02glob.ztst +++ b/Test/D02glob.ztst @@ -757,6 +757,42 @@ -f:(workers/45367) modifier ':P' squashes multiple slashes >/dev + ln -s loop glob.tmp/loop + ln -s loop glob.tmp/trap + { + (set -- glob.tmp/trap; echo $1:P) + (set -- glob.tmp/loop; echo $1:P) + } always { + rm -f glob.tmp/trap glob.tmp/loop + } +-f:the ':P' modifier handles symlink loops in the last path component +*>*/(trap|loop) +*>*/(trap|loop) + + ln -s loop glob.tmp/loop + ln -s loop glob.tmp/trap + { + (set -- glob.tmp/loop/trailing/components; echo $1:P) + (set -- glob.tmp/trap/trailing/components; echo $1:P) + } always { + rm -f glob.tmp/trap glob.tmp/loop + } +-f:the ':P' modifier handles symlink loops before the last path component +*>*/glob.tmp/loop/trailing/components +*>*/glob.tmp/(loop|trap)/trailing/components + + ln -s flip glob.tmp/flop + ln -s flop glob.tmp/flip + { + (set -- glob.tmp/flip; echo $1:P) + (set -- glob.tmp/flip/trailing/components; echo $1:P) + } always { + rm -f glob.tmp/flip glob.tmp/flop + } +-f:the ':P' modifier handles symlink loops other than the trivial case +*>*/glob.tmp/(flip|flop) +*>*/glob.tmp/(flip|flop)/trailing/components + %clean # Fix unreadable-directory permissions so ztst can clean up properly