BradenM/micropy-cli

Detection of Windows NTFS junction fails if path is a WindowsPath with a lower case drive letter

Open

#208 opened on Jan 6, 2021

 (0 comments) (0 reactions) (0 assignees)Python (29 forks)auto 404
bughelp wanted

Repository metrics

Stars
 (335 stars)
PR merge metrics
 (PR metrics pending)

Description

In the file helpers.py, function is_dir_link:

When running on Windows, if the path passed in is a WindowsPath with a lower case drive letter then the function will always return True regardless of the existence of the directory or its status as a regular directory or a junction.

This is because:

  1. WindowsPath.resolve() changes the drive letter to upper case while WindowsPath.absolute() doesn't.
  2. The results of path.resolve() and path.absolute() are converted to strings and then compared which fails due to drive letter case being different.

There are two solutions I can think of off the top of my head:

  1. Don't convert the path into two strings, just compare directly as in: if not (path.absolute() == path.resolve())
  2. The strings resulting from path.resolve() and path.absolute() could both be converted to all upper case or all lower case before the comparison is made (NTFS isn't a case sensitive file system so it doesn't matter).

Contributor guide