Fix transient error caching, digest slice panic, and file permission overwrite#41
Merged
Fix transient error caching, digest slice panic, and file permission overwrite#41
Conversation
Owner
|
@copilot TDD and fix these issues. |
Agent-Logs-Url: https://github.com/azu/dockerfile-pin/sessions/c47c5d41-8e12-4f01-ab26-8afa88612141 Co-authored-by: azu <19714+azu@users.noreply.github.com>
Agent-Logs-Url: https://github.com/azu/dockerfile-pin/sessions/c47c5d41-8e12-4f01-ab26-8afa88612141 Co-authored-by: azu <19714+azu@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix cached resolver to address transient errors, panic and permissions
Fix transient error caching, digest slice panic, and file permission overwrite
Apr 5, 2026
Owner
|
@copilot Can you add tests? |
…le permissions Agent-Logs-Url: https://github.com/azu/dockerfile-pin/sessions/e7d127e8-2c7e-44b2-b7f2-c72a17a37325 Co-authored-by: azu <19714+azu@users.noreply.github.com>
Contributor
Author
Added tests in e7be306:
|
Contributor
Author
Tests were added in e7be306. All 6 packages pass:
|
Owner
|
@copilot fix lint |
Agent-Logs-Url: https://github.com/azu/dockerfile-pin/sessions/bb39f3c3-699f-4c33-9171-fe4eb8eca2d9 Co-authored-by: azu <19714+azu@users.noreply.github.com>
Contributor
Author
azu
approved these changes
Apr 5, 2026
Merged
azu
pushed a commit
that referenced
this pull request
Apr 5, 2026
<!-- Release notes generated using configuration in .github/release.yml at main --> ## What's Changed ### Bug Fixes * Fix transient error caching, digest slice panic, and file permission overwrite by @Copilot in #41 ### CI * CI: improve release workflow safety and enable changelog by @azu in #39 ## New Contributors * @Copilot made their first contribution in #41 **Full Changelog**: v1.2.1...v1.2.2 Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Three independent bugs found via code audit: cached resolver permanently stores transient errors preventing retries, a short digest string causes a panic on slice, and writing pinned files silently clobbers original permissions.
Changes
internal/resolver/resolver.go—CachedResolver.ResolveandCachedResolver.Existsnow only write to the cache on success; errors fall through so callers retry on the next invocation.cmd/pin.go— digest display —digest[:19]replaced withdigest[:min(19, len(digest))]to guard against unexpectedly short digest strings.cmd/pin.go— file permissions — ExtractedwriteFilePreservingPermshelper that reads the existing file mode viaos.Statbefore writing, falling back to0644only when the stat fails. Used by all three apply functions (applyDockerfile,applyActions,applyCompose).Tests
TestCachedResolver_DoesNotCacheResolveErrors/TestCachedResolver_DoesNotCacheExistsErrors— use afailingResolverthat errors on the first call then succeeds; assert that the error is not cached and the second call retries successfully.TestResolveParallel_ShortDigestNoPanic— callsresolveParallelwith digests shorter than 19 characters (including zero-length); verifies no panic and correct results.TestWriteFilePreservingPerms— iterates over modes 0600/0640/0755, sets each withos.Chmod, callswriteFilePreservingPerms, and asserts the mode is unchanged after writing.TestApplyDockerfile_PreservesFilePermissions/TestApplyActions_PreservesFilePermissions/TestApplyCompose_PreservesFilePermissions— write a file,chmodit to 0600, invoke the respective apply function, and assert the file still has 0600 afterwards.fix #40