fix(coderd): correctly handle tar dir entries with missing path separator #12479
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.
STACK:
#12477
#12476
#12475
#12479 <-- you are here
I noticed that https://cs.opensource.google/go/go/+/refs/tags/go1.22.1:src/archive/tar/common.go;l=658 has a special case that adds a trailing slash to directory entries.
It turns out that
provisionersdk.Tar
has been silently stripping these when creating archives for a good while. Some versions ofunzip
* appear to ignorefileinfo.IsDir()
and simply assume that any header without a trailing path separator in the name is a file.This PR makes the following changes:
coderd.CreateZipFromTar
to transparently add the trailing path separatorprovisionersdk.Tar
to add the trailing path separator* I can reproduce this with
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.