diff --git a/distribution/pull_v2.go b/distribution/pull_v2.go index 0bef24d5f4..fdb2672d08 100644 --- a/distribution/pull_v2.go +++ b/distribution/pull_v2.go @@ -604,14 +604,12 @@ func (p *puller) pullSchema1(ctx context.Context, ref reference.Reference, unver } func checkSupportedMediaType(mediaType string) error { - supportedMediaTypes := []string{ - "application/vnd.oci.image.", - "application/vnd.docker.", - } - lowerMt := strings.ToLower(mediaType) for _, mt := range supportedMediaTypes { - if strings.HasPrefix(lowerMt, mt) { + // The should either be an exact match, or have a valid prefix + // we append a "." when matching prefixes to exclude "false positives"; + // for example, we don't want to match "application/vnd.oci.images_are_fun_yolo". + if lowerMt == mt || strings.HasPrefix(lowerMt, mt+".") { return nil } } diff --git a/distribution/registry.go b/distribution/registry.go index 36d3a42ca0..d656de400b 100644 --- a/distribution/registry.go +++ b/distribution/registry.go @@ -20,6 +20,22 @@ import ( ) var ( + // supportedMediaTypes represents acceptable media-type(-prefixes) + // we use this list to prevent obscure errors when trying to pull + // OCI artifacts. + supportedMediaTypes = []string{ + // valid prefixes + "application/vnd.oci.image", + "application/vnd.docker", + + // these types may occur on old images, and are copied from + // defaultImageTypes below. + "application/octet-stream", + "application/json", + "text/html", + "", + } + // defaultImageTypes represents the schema2 config types for images defaultImageTypes = []string{ schema2.MediaTypeImageConfig,