From a683c7c235e12a0dd0f03b64f8c41f06e1bd23bc Mon Sep 17 00:00:00 2001 From: Yu Wang Date: Thu, 21 Feb 2019 14:07:57 -0800 Subject: [PATCH] Fixes #2835 Process Accept header MIME types in case-insensitive way Use mime.ParseMediaType to parse the media types in Accept header in manifest request. Ignore the failed ones. Signed-off-by: Yu Wang --- registry/handlers/manifests.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/registry/handlers/manifests.go b/registry/handlers/manifests.go index 8da3f7af..6f2f5178 100644 --- a/registry/handlers/manifests.go +++ b/registry/handlers/manifests.go @@ -3,6 +3,7 @@ package handlers import ( "bytes" "fmt" + "mime" "net/http" "strings" @@ -97,14 +98,10 @@ func (imh *manifestHandler) GetManifest(w http.ResponseWriter, r *http.Request) // we need to split each header value on "," to get the full list of "Accept" values (per RFC 2616) // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 for _, mediaType := range strings.Split(acceptHeader, ",") { - // remove "; q=..." if present - if i := strings.Index(mediaType, ";"); i >= 0 { - mediaType = mediaType[:i] + if mediaType, _, err = mime.ParseMediaType(mediaType); err != nil { + continue } - // it's common (but not required) for Accept values to be space separated ("a/b, c/d, e/f") - mediaType = strings.TrimSpace(mediaType) - if mediaType == schema2.MediaTypeManifest { supports[manifestSchema2] = true }