twoliter: disallow std::path::Path::canonicalize #431
Merged
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.
Issue number:
Closes #427
Description of changes:
Twoliter uses the location of
Twoliter.toml
to locate the rest of the Twoliter workspace. Prior to this change, it usedstd::fs::canonicalize
to do so. This function resolves symlinks on the filesystem, which is a problem when you're building in the context of a symlink farm.This change moves to using path-absolutize for such canoncicalization, which uses unix separator and path traversal semantics to "canonicalize" a path without resolving symlinks or actually consulting with the host's filesystem.
The change also adds clippy lints to attempt to forbid future use of canonicalization functions that can cause this to regress.
See #427 for more details.
Testing done:
Twoliter.toml
was a symlink to another workspace. Issuing a build on the old version caused build artifacts to be placed in thebuild
directory behind the symlink. With the new change, build artifacts were placed in the new workspace as expected.Terms of contribution:
By submitting this pull request, I agree that this contribution is dual-licensed under the terms of both the Apache License, version 2.0, and the MIT license.