| From b3456925ca8450dedba32752e3417eb6e1ebf336 Mon Sep 17 00:00:00 2001 |
| From: Samuel Karp <skarp@amazon.com> |
| Date: Thu, 4 Nov 2021 14:41:21 -0700 |
| Subject: [PATCH] vendor: update github.com/docker/distribution |
| |
| diff --git a/vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go b/vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go |
| index 54c8f3c94c..09b3609737 100644 |
| --- a/vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go |
| +++ b/vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go |
| @@ -54,6 +54,9 @@ func init() { |
| } |
| |
| imageIndexFunc := func(b []byte) (distribution.Manifest, distribution.Descriptor, error) { |
| + if err := validateIndex(b); err != nil { |
| + return nil, distribution.Descriptor{}, err |
| + } |
| m := new(DeserializedManifestList) |
| err := m.UnmarshalJSON(b) |
| if err != nil { |
| @@ -214,3 +217,23 @@ func (m DeserializedManifestList) Payload() (string, []byte, error) { |
| |
| return mediaType, m.canonical, nil |
| } |
| + |
| +// unknownDocument represents a manifest, manifest list, or index that has not |
| +// yet been validated |
| +type unknownDocument struct { |
| + Config interface{} `json:"config,omitempty"` |
| + Layers interface{} `json:"layers,omitempty"` |
| +} |
| + |
| +// validateIndex returns an error if the byte slice is invalid JSON or if it |
| +// contains fields that belong to a manifest |
| +func validateIndex(b []byte) error { |
| + var doc unknownDocument |
| + if err := json.Unmarshal(b, &doc); err != nil { |
| + return err |
| + } |
| + if doc.Config != nil || doc.Layers != nil { |
| + return errors.New("index: expected index but found manifest") |
| + } |
| + return nil |
| +} |
| diff --git a/vendor/github.com/docker/distribution/manifest/ocischema/manifest.go b/vendor/github.com/docker/distribution/manifest/ocischema/manifest.go |
| index b8c4bab547..910a64afb4 100644 |
| --- a/vendor/github.com/docker/distribution/manifest/ocischema/manifest.go |
| +++ b/vendor/github.com/docker/distribution/manifest/ocischema/manifest.go |
| @@ -22,6 +22,9 @@ var ( |
| |
| func init() { |
| ocischemaFunc := func(b []byte) (distribution.Manifest, distribution.Descriptor, error) { |
| + if err := validateManifest(b); err != nil { |
| + return nil, distribution.Descriptor{}, err |
| + } |
| m := new(DeserializedManifest) |
| err := m.UnmarshalJSON(b) |
| if err != nil { |
| @@ -122,3 +125,22 @@ func (m *DeserializedManifest) MarshalJSON() ([]byte, error) { |
| func (m DeserializedManifest) Payload() (string, []byte, error) { |
| return v1.MediaTypeImageManifest, m.canonical, nil |
| } |
| + |
| +// unknownDocument represents a manifest, manifest list, or index that has not |
| +// yet been validated |
| +type unknownDocument struct { |
| + Manifests interface{} `json:"manifests,omitempty"` |
| +} |
| + |
| +// validateManifest returns an error if the byte slice is invalid JSON or if it |
| +// contains fields that belong to a index |
| +func validateManifest(b []byte) error { |
| + var doc unknownDocument |
| + if err := json.Unmarshal(b, &doc); err != nil { |
| + return err |
| + } |
| + if doc.Manifests != nil { |
| + return errors.New("ocimanifest: expected manifest but found index") |
| + } |
| + return nil |
| +} |
| -- |
| 2.34.0.rc2.393.gf8c9666880-goog |
| |