embed: allow seeking past EOF to match os.File behavior - #81334
Open
dajiaohuang wants to merge 2 commits into
Open
embed: allow seeking past EOF to match os.File behavior#81334dajiaohuang wants to merge 2 commits into
dajiaohuang wants to merge 2 commits into
Conversation
…lbackNext Fix panic when unmarshaling into a struct with an unexported pointer field with the ,embed tag and a map[string]any type. When the embedded pointer is nil and cannot be allocated (e.g., for unexported fields), indirect returns an invalid addressableValue. The marshal path already had a check for this, but the unmarshal path did not, causing a panic when trying to call methods on the invalid value. Fixes golang#81297
Fixes golang#81330 embed.FS was returning 'invalid argument' when seeking past EOF, while os.File returns nil (and subsequent Read returns io.EOF). The fix removes the upper bound check in Seek, allowing offsets beyond the file size. This matches the behavior of os.File and io.SectionReader, where seeking past EOF is allowed and subsequent reads return io.EOF. Before: f.Seek(100000, io.SeekStart) -> 'invalid argument' After: f.Seek(100000, io.SeekStart) -> nil, Read() -> io.EOF Assisted-by: Claude Opus 4.6
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
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.
Summary
Fixes #81330
embed.FS was returning 'invalid argument' when seeking past EOF, while os.File returns nil (and subsequent Read returns io.EOF).
Problem
Seekin embed.FS checksoffset > int64(len(f.f.data))and returns an error for offsets beyond EOF. This differs from os.File behavior where seeking past EOF is allowed and subsequent reads return io.EOF.Solution
Remove the upper bound check in
Seek, allowing offsets beyond the file size. This matches the behavior of os.File and io.SectionReader.Changes
src/embed/embed.goline 371:Behavior After Fix
This matches os.File, bytes.Reader, and io.SectionReader behavior.
Assisted-by: Claude Opus 4.6