[release/7.0] Fix relative symlink support in TarFile #78470
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.
Backport of #77338 to release/7.0
/cc @jozkee @am11
Customer Impact
Path.Combine(destinationDirectory, path)
resulted in a path outside of the destination directory. Said Path combination was incorrect since links targets are relative to where the link is located.With this fix, symlinks with relative targets don’t run into unexpected exceptions and their relative target is correctly preserved on extraction.
It is an important scenario as relative symlinks are perhaps the most common kind of symlink for their portability and both issues stated above would mess with that.
Testing
Added tests for relative targets pointing inside (OK) and outside (Throw) the destination directory, combined with the link being in multiple levels of the destination directory.
Risk
Low, System.Formats.Tar is a new feature in 7.0