images: use mediatype helpers

Signed-off-by: Bjorn Neergaard <bjorn.neergaard@docker.com>
This commit is contained in:
Bjorn Neergaard 2023-09-27 08:32:27 -06:00
parent 9ffb34ac49
commit bb8a472f24
No known key found for this signature in database
2 changed files with 13 additions and 22 deletions

View File

@ -294,8 +294,8 @@ func LimitManifests(f HandlerFunc, m platforms.MatchComparer, n int) HandlerFunc
return children, err return children, err
} }
switch desc.MediaType { // only limit manifests from an index
case ocispec.MediaTypeImageIndex, MediaTypeDockerSchema2ManifestList: if IsIndexType(desc.MediaType) {
sort.SliceStable(children, func(i, j int) bool { sort.SliceStable(children, func(i, j int) bool {
if children[i].Platform == nil { if children[i].Platform == nil {
return false return false
@ -314,8 +314,6 @@ func LimitManifests(f HandlerFunc, m platforms.MatchComparer, n int) HandlerFunc
children = children[:n] children = children[:n]
} }
} }
default:
// only limit manifests from an index
} }
return children, nil return children, nil
} }

View File

@ -147,8 +147,7 @@ func Manifest(ctx context.Context, provider content.Provider, image ocispec.Desc
) )
if err := Walk(ctx, HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { if err := Walk(ctx, HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
switch desc.MediaType { if IsManifestType(desc.MediaType) {
case MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
p, err := content.ReadBlob(ctx, provider, desc) p, err := content.ReadBlob(ctx, provider, desc)
if err != nil { if err != nil {
return nil, err return nil, err
@ -186,7 +185,7 @@ func Manifest(ctx context.Context, provider content.Provider, image ocispec.Desc
}) })
return nil, nil return nil, nil
case MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex: } else if IsIndexType(desc.MediaType) {
p, err := content.ReadBlob(ctx, provider, desc) p, err := content.ReadBlob(ctx, provider, desc)
if err != nil { if err != nil {
return nil, err return nil, err
@ -266,8 +265,7 @@ func Platforms(ctx context.Context, provider content.Provider, image ocispec.Des
return nil, ErrSkipDesc return nil, ErrSkipDesc
} }
switch desc.MediaType { if IsConfigType(desc.MediaType) {
case MediaTypeDockerSchema2Config, ocispec.MediaTypeImageConfig:
imagePlatform, err := ConfigPlatform(ctx, provider, desc) imagePlatform, err := ConfigPlatform(ctx, provider, desc)
if err != nil { if err != nil {
return nil, err return nil, err
@ -324,8 +322,7 @@ func Check(ctx context.Context, provider content.Provider, image ocispec.Descrip
// Children returns the immediate children of content described by the descriptor. // Children returns the immediate children of content described by the descriptor.
func Children(ctx context.Context, provider content.Provider, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { func Children(ctx context.Context, provider content.Provider, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
var descs []ocispec.Descriptor var descs []ocispec.Descriptor
switch desc.MediaType { if IsManifestType(desc.MediaType) {
case MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
p, err := content.ReadBlob(ctx, provider, desc) p, err := content.ReadBlob(ctx, provider, desc)
if err != nil { if err != nil {
return nil, err return nil, err
@ -344,7 +341,7 @@ func Children(ctx context.Context, provider content.Provider, desc ocispec.Descr
descs = append(descs, manifest.Config) descs = append(descs, manifest.Config)
descs = append(descs, manifest.Layers...) descs = append(descs, manifest.Layers...)
case MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex: } else if IsIndexType(desc.MediaType) {
p, err := content.ReadBlob(ctx, provider, desc) p, err := content.ReadBlob(ctx, provider, desc)
if err != nil { if err != nil {
return nil, err return nil, err
@ -360,7 +357,7 @@ func Children(ctx context.Context, provider content.Provider, desc ocispec.Descr
} }
descs = append(descs, index.Manifests...) descs = append(descs, index.Manifests...)
default: } else {
if IsLayerType(desc.MediaType) || IsKnownConfig(desc.MediaType) { if IsLayerType(desc.MediaType) || IsKnownConfig(desc.MediaType) {
// childless data types. // childless data types.
return nil, nil return nil, nil
@ -392,19 +389,15 @@ func validateMediaType(b []byte, mt string) error {
if len(doc.FSLayers) != 0 { if len(doc.FSLayers) != 0 {
return fmt.Errorf("media-type: schema 1 not supported") return fmt.Errorf("media-type: schema 1 not supported")
} }
switch mt { if IsManifestType(mt) {
case MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest: if len(doc.Manifests) != 0 || IsIndexType(doc.MediaType) {
if len(doc.Manifests) != 0 ||
doc.MediaType == MediaTypeDockerSchema2ManifestList ||
doc.MediaType == ocispec.MediaTypeImageIndex {
return fmt.Errorf("media-type: expected manifest but found index (%s)", mt) return fmt.Errorf("media-type: expected manifest but found index (%s)", mt)
} }
case MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex: } else if IsIndexType(mt) {
if len(doc.Config) != 0 || len(doc.Layers) != 0 || if len(doc.Config) != 0 || len(doc.Layers) != 0 || IsManifestType(doc.MediaType) {
doc.MediaType == MediaTypeDockerSchema2Manifest ||
doc.MediaType == ocispec.MediaTypeImageManifest {
return fmt.Errorf("media-type: expected index but found manifest (%s)", mt) return fmt.Errorf("media-type: expected index but found manifest (%s)", mt)
} }
} }
return nil return nil
} }