Skip to content

Commit 4829143

Browse files
committed
cmd/oci-image-tool: validate descriptors MediaType
Signed-off-by: Antonio Murdaca <[email protected]>
1 parent 551f37d commit 4829143

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
@@ -20,6 +20,7 @@ import (
2020
"os"
2121
"path/filepath"
2222

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

@@ -43,14 +44,19 @@ func Validate(tarFile string, refs []string, out *log.Logger) error {
4344
return validate(newTarWalker(f), refs, out)
4445
}
4546

47+
var validRefMediaTypes = []string{
48+
v1.MediaTypeImageManifest,
49+
v1.MediaTypeImageManifestList,
50+
}
51+
4652
func validate(w walker, refs []string, out *log.Logger) error {
4753
for _, r := range refs {
4854
ref, err := findDescriptor(w, r)
4955
if err != nil {
5056
return err
5157
}
5258

53-
if err = ref.validate(w); err != nil {
59+
if err = ref.validate(w, validRefMediaTypes); err != nil {
5460
return err
5561
}
5662

@@ -97,7 +103,7 @@ func unpack(w walker, dest, refName string) error {
97103
return err
98104
}
99105

100-
if err = ref.validate(w); err != nil {
106+
if err = ref.validate(w, validRefMediaTypes); err != nil {
101107
return err
102108
}
103109

@@ -139,7 +145,7 @@ func createRuntimeBundle(w walker, dest, refName, rootfs string) error {
139145
return err
140146
}
141147

142-
if err = ref.validate(w); err != nil {
148+
if err = ref.validate(w, validRefMediaTypes); err != nil {
143149
return err
144150
}
145151

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)