Skip to content

Commit

Permalink
Use abspath() instead of resolve() in expand._assert_local()
Browse files Browse the repository at this point in the history
4249da1 uses `pathlib.Path.resolve()` instead of `os.path.abspath()`
to canonicalize path names. `resolve()` resolves symlinks, whereas
`abspath()` does not. `resolve()` can also raise a `RuntimeError` if
infinite loops are discovered while resolving the path. There is some
concern that using `resolve()` would not be backwards compatible. This
commit switches back to `abspath()` but still uses `Path.parents` to
avoid the edge case. See PR #3595 for more details.
  • Loading branch information
mssalvatore committed Sep 23, 2022
1 parent 4249da1 commit 063aecd
Showing 1 changed file with 1 addition and 3 deletions.
4 changes: 1 addition & 3 deletions setuptools/config/expand.py
Expand Up @@ -151,9 +151,7 @@ def _read_file(filepath: Union[bytes, _Path]) -> str:


def _assert_local(filepath: _Path, root_dir: str):
# NOTE: Path.resolve() will raise RuntimeError if an infinite loop is
# encountered along the resolution path of root_dir or file_path.
if Path(root_dir).resolve() not in Path(filepath).resolve().parents:
if Path(os.path.abspath(root_dir)) not in Path(os.path.abspath(filepath)).parents:
msg = f"Cannot access {filepath!r} (or anything outside {root_dir!r})"
raise DistutilsOptionError(msg)

Expand Down

0 comments on commit 063aecd

Please sign in to comment.