Use relative-path for logical path traversal #4831
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #4477
This fixes the longstanding issue where you get the following error in case a relative path is specified on Windows which contains
.
or..
components:If you doubt if this issue is still present, you can checkout the Tokio project and give it a spin.
The long version is that paths beginning with
\\?\
on Windows are "raw paths" which turns of automatic expansion of.
and..
causing them to be treated as files and not current and parent directory. Joining them using the regular method as provided byPath
causes.
and..
to be incorrectly included in the absolute path.These kinds of paths are returned by e.g. the
fs::canonicalize
implementation on Windows.For more, see: https://github.com/udoprog/patterns/blob/main/examples/relative-path.rs
Note that an alternative is to avoid path canonicalization in how rustfmt processes things, allowing it to work like
rustc
since that basically uses the same implementation in how thepath
attribute is expanded.