diff --git a/hack/vendor.sh b/hack/vendor.sh index df3f9555e4..7432b414d3 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -46,7 +46,7 @@ clone git github.com/boltdb/bolt v1.1.0 clone git github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7 # get graph and distribution packages -clone git github.com/docker/distribution 08650825fef9f21ea819972fb2ed875c0832a255 +clone git github.com/docker/distribution c301f8ab27f4913c968b8d73a38e5dda79b9d3d7 clone git github.com/vbatts/tar-split v0.9.11 # get desired notary commit, might also need to be updated in Dockerfile diff --git a/vendor/src/github.com/docker/distribution/manifests.go b/vendor/src/github.com/docker/distribution/manifests.go index 222916b880..1acb0500d7 100644 --- a/vendor/src/github.com/docker/distribution/manifests.go +++ b/vendor/src/github.com/docker/distribution/manifests.go @@ -2,7 +2,7 @@ package distribution import ( "fmt" - "strings" + "mime" "github.com/docker/distribution/context" "github.com/docker/distribution/digest" @@ -84,19 +84,23 @@ var mappings = make(map[string]UnmarshalFunc, 0) // UnmarshalManifest looks up manifest unmarshall functions based on // MediaType func UnmarshalManifest(ctHeader string, p []byte) (Manifest, Descriptor, error) { - // Need to look up by the actual content type, not the raw contents of + // Need to look up by the actual media type, not the raw contents of // the header. Strip semicolons and anything following them. var mediatype string - semicolonIndex := strings.Index(ctHeader, ";") - if semicolonIndex != -1 { - mediatype = ctHeader[:semicolonIndex] - } else { - mediatype = ctHeader + if ctHeader != "" { + var err error + mediatype, _, err = mime.ParseMediaType(ctHeader) + if err != nil { + return nil, Descriptor{}, err + } } unmarshalFunc, ok := mappings[mediatype] if !ok { - return nil, Descriptor{}, fmt.Errorf("unsupported manifest mediatype: %s", mediatype) + unmarshalFunc, ok = mappings[""] + if !ok { + return nil, Descriptor{}, fmt.Errorf("unsupported manifest mediatype and no default available: %s", mediatype) + } } return unmarshalFunc(p)