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.

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