Skip to content

Commit

Permalink
Use io.ReadFull to read the bundle content
Browse files Browse the repository at this point in the history
The io.Reader documentation says:

> Read reads up to len(p) bytes into p. It returns the number of bytes
> read (0 <= n <= len(p)) and any error encountered. ... If some data is
> available but not len(p) bytes, Read conventionally returns what is
> available instead of waiting for more.

Read is not guaranteed to fill the data argument. Use io.ReadFull to
fill the buffer.

In some cases (a relatively big bundle), the bundle content was not
completely read and it would fail to parse. Using `io.ReadFull` fixes
the issue.

Signed-off-by: Vincent Demeester <[email protected]>
  • Loading branch information
vdemeester authored and tekton-robot committed Nov 18, 2024
1 parent 7dee9ac commit ea3ea29
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/resolution/resolver/bundle/bundle.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func readTarLayer(layer v1.Layer) ([]byte, error) {
}

contents := make([]byte, header.Size)
if _, err := treader.Read(contents); err != nil && !errors.Is(err, io.EOF) {
if _, err := io.ReadFull(treader, contents); err != nil && err != io.EOF {
// We only allow 1 resource per layer so this tar bundle should have one and only one file.
return nil, fmt.Errorf("failed to read tar bundle: %w", err)
}
Expand Down

0 comments on commit ea3ea29

Please sign in to comment.