Skip to content

Commit 7eb8a4b

Browse files
committed
cmd/oci-image-tool: validate descriptors MediaType
Signed-off-by: Antonio Murdaca <[email protected]>
1 parent 067fb64 commit 7eb8a4b

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

image/descriptor.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,17 @@ func findDescriptor(w walker, name string) (*descriptor, error) {
7373
}
7474
}
7575

76-
func (d *descriptor) validate(w walker) error {
76+
func (d *descriptor) validate(w walker, mts []string) error {
77+
var found bool
78+
for _, mt := range mts {
79+
if d.MediaType == mt {
80+
found = true
81+
break
82+
}
83+
}
84+
if !found {
85+
return fmt.Errorf("invalid descriptor MediaType %q", d.MediaType)
86+
}
7787
switch err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
7888
if info.IsDir() {
7989
return nil

image/image.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"os"
2020
"path/filepath"
2121

22+
"github.com/opencontainers/image-spec/specs-go/v1"
2223
"github.com/pkg/errors"
2324
)
2425

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

46+
var validRefMediaTypes = []string{
47+
v1.MediaTypeImageManifest,
48+
v1.MediaTypeImageManifestList,
49+
}
50+
4551
func validate(w walker, refName string) error {
4652
ref, err := findDescriptor(w, refName)
4753
if err != nil {
4854
return err
4955
}
5056

51-
if err = ref.validate(w); err != nil {
57+
if err = ref.validate(w, validRefMediaTypes); err != nil {
5258
return err
5359
}
5460

@@ -88,7 +94,7 @@ func unpack(w walker, dest, refName string) error {
8894
return err
8995
}
9096

91-
if err = ref.validate(w); err != nil {
97+
if err = ref.validate(w, validRefMediaTypes); err != nil {
9298
return err
9399
}
94100

@@ -130,7 +136,7 @@ func createRuntimeBundle(w walker, dest, refName, rootfs string) error {
130136
return err
131137
}
132138

133-
if err = ref.validate(w); err != nil {
139+
if err = ref.validate(w, validRefMediaTypes); err != nil {
134140
return err
135141
}
136142

image/manifest.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"time"
2929

3030
"github.com/opencontainers/image-spec/schema"
31+
"github.com/opencontainers/image-spec/specs-go/v1"
3132
"github.com/pkg/errors"
3233
)
3334

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

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

8182
for _, d := range m.Layers {
82-
if err := d.validate(w); err != nil {
83+
if err := d.validate(w, []string{v1.MediaTypeImageLayer}); err != nil {
8384
return errors.Wrap(err, "layer validation failed")
8485
}
8586
}

0 commit comments

Comments
 (0)