BradenM/micropy-cli

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

Ouverte

#208 ouverte le 6 janv. 2021

 (0 commentaire) (0 réaction) (0 personne assignée)Python (29 forks)auto 404
bughelp wanted

Métriques du dépôt

Stars
 (335 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

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

Guide contributeur