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

AltStyle によって変換されたページ (->オリジナル) /