Skip to content

Commit

Permalink
cmd/oci-image-tool: validate descriptors MediaType
Browse files Browse the repository at this point in the history
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
  • Loading branch information
runcom committed Sep 6, 2016
1 parent 067fb64 commit 7eb8a4b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
12 changes: 11 additions & 1 deletion image/descriptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,17 @@ func findDescriptor(w walker, name string) (*descriptor, error) {
}
}

func (d *descriptor) validate(w walker) error {
func (d *descriptor) validate(w walker, mts []string) error {
var found bool
for _, mt := range mts {
if d.MediaType == mt {
found = true
break
}
}
if !found {
return fmt.Errorf("invalid descriptor MediaType %q", d.MediaType)
}
switch err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
if info.IsDir() {
return nil
Expand Down
12 changes: 9 additions & 3 deletions image/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"os"
"path/filepath"

"github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)

Expand All @@ -42,13 +43,18 @@ func Validate(tarFile, ref string) error {
return validate(newTarWalker(f), ref)
}

var validRefMediaTypes = []string{
v1.MediaTypeImageManifest,
v1.MediaTypeImageManifestList,
}

func validate(w walker, refName string) error {
ref, err := findDescriptor(w, refName)
if err != nil {
return err
}

if err = ref.validate(w); err != nil {
if err = ref.validate(w, validRefMediaTypes); err != nil {
return err
}

Expand Down Expand Up @@ -88,7 +94,7 @@ func unpack(w walker, dest, refName string) error {
return err
}

if err = ref.validate(w); err != nil {
if err = ref.validate(w, validRefMediaTypes); err != nil {
return err
}

Expand Down Expand Up @@ -130,7 +136,7 @@ func createRuntimeBundle(w walker, dest, refName, rootfs string) error {
return err
}

if err = ref.validate(w); err != nil {
if err = ref.validate(w, validRefMediaTypes); err != nil {
return err
}

Expand Down
5 changes: 3 additions & 2 deletions image/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"time"

"github.com/opencontainers/image-spec/schema"
"github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
)

Expand Down Expand Up @@ -74,12 +75,12 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
}

func (m *manifest) validate(w walker) error {
if err := m.Config.validate(w); err != nil {
if err := m.Config.validate(w, []string{v1.MediaTypeImageConfig}); err != nil {
return errors.Wrap(err, "config validation failed")
}

for _, d := range m.Layers {
if err := d.validate(w); err != nil {
if err := d.validate(w, []string{v1.MediaTypeImageLayer}); err != nil {
return errors.Wrap(err, "layer validation failed")
}
}
Expand Down

0 comments on commit 7eb8a4b

Please sign in to comment.