diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index b9763c8d2..16de025b6 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -2302,13 +2302,22 @@ symlink_info::check_reparse_point (HANDLE h, bool remote) rp->SymbolicLinkReparseBuffer.SubstituteNameLength); else if (!remote && rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) { - /* Don't treat junctions as symlink. The return value of -1 is a hint - for the caller to treat this as a volume mount point. */ + /* Don't handle junctions on remote filesystems as symlinks. This type + of reparse point is handled transparently by the OS so that the + target of the junction is the remote directory it is supposed to + point to. If we handle it as symlink, it will be mistreated as + pointing to a dir on the local system. */ RtlInitCountedUnicodeString (&subst, (WCHAR *)((char *)rp->MountPointReparseBuffer.PathBuffer + rp->MountPointReparseBuffer.SubstituteNameOffset), rp->MountPointReparseBuffer.SubstituteNameLength); - return RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE) ? -1 : 0; + if (RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE)) + { + /* Volume mount point. Not treated as symlink. The return + value of -1 is a hint for the caller to treat this as a + volume mount point. */ + return -1; + } } else { diff --git a/winsup/cygwin/release/2.8.0 b/winsup/cygwin/release/2.8.0 index 2ccbcf10e..9e6c482d4 100644 --- a/winsup/cygwin/release/2.8.0 +++ b/winsup/cygwin/release/2.8.0 @@ -30,6 +30,3 @@ Bug Fixes - Workaround Windows NUL having the same problem for writes > 4 GB. Addresses: https://cygwin.com/ml/cygwin/2017-03/msg00144.html - -- Fix a potential crash in duplocale. - Addresses: https://sourceware.org/ml/newlib/2017/msg00166.html