Use mime package to parse media type

This replaces custom parsing with the standard library's mime package.
This is simpler and more correct.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2016-01-20 09:59:19 -08:00
parent 47a064d419
commit 93d019658f

View File

@ -2,7 +2,7 @@ package distribution
import ( import (
"fmt" "fmt"
"strings" "mime"
"github.com/docker/distribution/context" "github.com/docker/distribution/context"
"github.com/docker/distribution/digest" "github.com/docker/distribution/digest"
@ -82,14 +82,15 @@ var mappings = make(map[string]UnmarshalFunc, 0)
// UnmarshalManifest looks up manifest unmarshall functions based on // UnmarshalManifest looks up manifest unmarshall functions based on
// MediaType // MediaType
func UnmarshalManifest(ctHeader string, p []byte) (Manifest, Descriptor, error) { 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. // the header. Strip semicolons and anything following them.
var mediatype string var mediatype string
semicolonIndex := strings.Index(ctHeader, ";") if ctHeader != "" {
if semicolonIndex != -1 { var err error
mediatype = ctHeader[:semicolonIndex] mediatype, _, err = mime.ParseMediaType(ctHeader)
} else { if err != nil {
mediatype = ctHeader return nil, Descriptor{}, err
}
} }
unmarshalFunc, ok := mappings[mediatype] unmarshalFunc, ok := mappings[mediatype]