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

--
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

Reply via email to