Deleting a directory with the same name as a shortcut deletes everything in CWD
Ken Brown
kbrown@cornell.edu
Tue Aug 9 19:52:25 GMT 2022
On 8/8/2022 7:29 PM, Ken Brown wrote:
> On 8/8/2022 7:56 AM, Christian Franke wrote:
>> 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
>
> This happens because symlink_info::check returns -1 instead of 0 when called on
> "link". The main loop over suffixes finds and rejects link.lnk but then leaves
> "res" as -1 when it continues looping. The following patch fixes the problem:
>
> --- a/winsup/cygwin/path.cc
> +++ b/winsup/cygwin/path.cc
> @@ -3422,6 +3422,7 @@ restart:
> {
> fileattr = INVALID_FILE_ATTRIBUTES;
> set_error (ENOENT);
> + res = 0;
> continue;
> }
>
> It's possible that a better fix would be to set res = 0 at the beginning of each
> iteration of the loop, but I'll have to study the code more carefully before I'm
> sure of that. Also, the comment preceding symlink_info::check needs to be fixed
> to correctly indicate what a negative return value means. I'll look at all this
> more carefully tomorrow if no one beats me to it.
I think the best fix is to set res = 0 at the beginning of the loop and to
remove a "res = -1" that occurs later. I've sent a patch to cygwin-patches.
Ken
More information about the Cygwin
mailing list