BradenM/micropy-cli

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

开放

#208 创建于 2021年1月6日

 (0 条评论) (0 个反应) (0 位负责人)Python (29 个派生)auto 404
bughelp wanted

仓库指标

星标
 (335 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

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

贡献者指南