From 15804528ca9abea05fec5e545bae6378dd2f2be9 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Mon, 18 Nov 2024 15:56:03 +0100 Subject: [PATCH] Use io.ReadFull to read the bundle content 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 --- pkg/resolution/resolver/bundle/bundle.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/resolution/resolver/bundle/bundle.go b/pkg/resolution/resolver/bundle/bundle.go index e8f2ddac41b..94514e592d2 100644 --- a/pkg/resolution/resolver/bundle/bundle.go +++ b/pkg/resolution/resolver/bundle/bundle.go @@ -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) }