Oskar Skog wrote:
Deleting a directory with the same name as a shortcut deletes everything
in the current working directory.
Tested on:
CYGWIN_NT-10.0-19044 3.3.5-341.x86_64 2022-05-13 12:27 UTC x86_64 Cygwin
CYGWIN_NT-10.0-22000 3.3.5-341.x86_64 2022-05-13 12:27 UTC x86_64 Cygwin
Script to reproduce the bug (also in the tar):
#!/bin/bash
echo 'EVERY FILE IN THE CURRENT WORKING DIRECTORY WILL BE DELETED!'
read -p "Enter 'sure' to continue: " var
echo $var | grep -q sure || exit 1
do_stuff ()
{
mkdir foo
touch Foo.lnk
if [ -d foo ]; then
rm -rf foo
fi
}
do_stuff
do_stuff
# All files in the current working directory are now GONE!
The first "do_stuff" removes "foo" as expected. The second call
accidentally detects "foo" as a directory because stat("foo", .) returns
"directory" and opendir("foo") succeeds unexpectedly. This behavior
recurses.
Testcase:
$ ls -a
. ..
$ touch link.lnk file.txt
$ ls -a
. .. file.txt link.lnk
$ stat -c %F link.lnk
regular empty file
$ stat -c %F link
directory
$ ls -a link
. .. file.txt link.lnk
$ stat -c %F link/link/link/link
directory
$ ls link/link/link/link
. .. file.txt link.lnk
$ rm link/link/link/link
rm: cannot remove 'link/link/link/link': Is a directory
$ rm -rfv link/link/link/link
removed 'link/link/link/link/file.txt'
removed 'link/link/link/link/link.lnk'
$ ls -a
. ..
--
Regards,
Christian
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple