diff --git a/content/helpers.go b/content/helpers.go index 13af9d7d5..f74d72a93 100644 --- a/content/helpers.go +++ b/content/helpers.go @@ -59,6 +59,10 @@ func NewReader(ra ReaderAt) io.Reader { // // Avoid using this for large blobs, such as layers. func ReadBlob(ctx context.Context, provider Provider, desc ocispec.Descriptor) ([]byte, error) { + if int64(len(desc.Data)) == desc.Size && digest.FromBytes(desc.Data) == desc.Digest { + return desc.Data, nil + } + ra, err := provider.ReaderAt(ctx, desc) if err != nil { return nil, err diff --git a/remotes/handlers.go b/remotes/handlers.go index b0d8880f6..16279caf7 100644 --- a/remotes/handlers.go +++ b/remotes/handlers.go @@ -17,6 +17,7 @@ package remotes import ( + "bytes" "context" "errors" "fmt" @@ -139,6 +140,10 @@ func Fetch(ctx context.Context, ingester content.Ingester, fetcher Fetcher, desc return err } + if desc.Size == int64(len(desc.Data)) { + return content.Copy(ctx, cw, bytes.NewReader(desc.Data), desc.Size, desc.Digest) + } + rc, err := fetcher.Fetch(ctx, desc) if err != nil { return err