From 703c25e4522fa0c5dab85e29a93556b03df74848 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Thu, 7 Jun 2018 17:41:53 +0900 Subject: [PATCH] fix schema1 fetchBlob() Signed-off-by: Akihiro Suda --- client_test.go | 16 ++++++++++++++++ remotes/docker/schema1/converter.go | 10 +++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/client_test.go b/client_test.go index 4b8d09bc8..428e34086 100644 --- a/client_test.go +++ b/client_test.go @@ -291,6 +291,22 @@ func TestImagePullSomePlatforms(t *testing.T) { } } +func TestImagePullSchema1(t *testing.T) { + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + ctx, cancel := testContext() + defer cancel() + schema1TestImage := "gcr.io/google_containers/pause:3.0@sha256:0d093c962a6c2dd8bb8727b661e2b5f13e9df884af9945b4cc7088d9350cd3ee" + _, err = client.Pull(ctx, schema1TestImage, WithPlatform(platforms.Default()), WithSchema1Conversion) + if err != nil { + t.Fatal(err) + } +} + func TestClientReconnect(t *testing.T) { t.Parallel() diff --git a/remotes/docker/schema1/converter.go b/remotes/docker/schema1/converter.go index c6261c5df..cf1137fc3 100644 --- a/remotes/docker/schema1/converter.go +++ b/remotes/docker/schema1/converter.go @@ -257,15 +257,15 @@ func (c *Converter) fetchBlob(ctx context.Context, desc ocispec.Descriptor) erro var ( ref = remotes.MakeRefKey(ctx, desc) calc = newBlobStateCalculator() - size = desc.Size ) // size may be unknown, set to zero for content ingest - if size == -1 { - size = 0 + ingestDesc := desc + if ingestDesc.Size == -1 { + ingestDesc.Size = 0 } - cw, err := content.OpenWriter(ctx, c.contentStore, content.WithRef(ref), content.WithDescriptor(desc)) + cw, err := content.OpenWriter(ctx, c.contentStore, content.WithRef(ref), content.WithDescriptor(ingestDesc)) if err != nil { if !errdefs.IsAlreadyExists(err) { return err @@ -317,7 +317,7 @@ func (c *Converter) fetchBlob(ctx context.Context, desc ocispec.Descriptor) erro eg.Go(func() error { defer pw.Close() - return content.Copy(ctx, cw, io.TeeReader(rc, pw), size, desc.Digest) + return content.Copy(ctx, cw, io.TeeReader(rc, pw), ingestDesc.Size, ingestDesc.Digest) }) if err := eg.Wait(); err != nil {