@@ -16,8 +16,8 @@ import (
1616 "github.com/sigstore/cosign/pkg/oci/remote"
1717
1818 zerr "zotregistry.io/zot/errors"
19- "zotregistry.io/zot/pkg/scheduler"
2019 zcommon "zotregistry.io/zot/pkg/common"
20+ "zotregistry.io/zot/pkg/scheduler"
2121 storageConstants "zotregistry.io/zot/pkg/storage/constants"
2222)
2323
@@ -59,19 +59,21 @@ func GetManifestDescByReference(index ispec.Index, reference string) (ispec.Desc
5959
6060func ValidateManifest (imgStore ImageStore , repo , reference , mediaType string , body []byte ,
6161 log zerolog.Logger ,
62- ) (godigest. Digest , error ) {
62+ ) (ispec. Descriptor , error ) {
6363 // validate the manifest
6464 if ! IsSupportedMediaType (mediaType ) {
6565 log .Debug ().Interface ("actual" , mediaType ).
6666 Msg ("bad manifest media type" )
6767
68- return "" , zerr .ErrBadManifest
68+ return ispec. Descriptor {} , zerr .ErrBadManifest
6969 }
7070
71+ var descriptor ispec.Descriptor
72+
7173 if len (body ) == 0 {
7274 log .Debug ().Int ("len" , len (body )).Msg ("invalid body length" )
7375
74- return "" , zerr .ErrBadManifest
76+ return ispec. Descriptor {} , zerr .ErrBadManifest
7577 }
7678
7779 switch mediaType {
@@ -80,15 +82,15 @@ func ValidateManifest(imgStore ImageStore, repo, reference, mediaType string, bo
8082 if err := json .Unmarshal (body , & manifest ); err != nil {
8183 log .Error ().Err (err ).Msg ("unable to unmarshal JSON" )
8284
83- return "" , zerr .ErrBadManifest
85+ return ispec. Descriptor {} , zerr .ErrBadManifest
8486 }
8587
8688 if manifest .Config .MediaType == ispec .MediaTypeImageConfig {
8789 digest , err := validateOCIManifest (imgStore , repo , reference , & manifest , log )
8890 if err != nil {
8991 log .Error ().Err (err ).Msg ("invalid oci image manifest" )
9092
91- return digest , err
93+ return ispec. Descriptor { Digest : digest } , err
9294 }
9395 }
9496
@@ -97,19 +99,33 @@ func ValidateManifest(imgStore ImageStore, repo, reference, mediaType string, bo
9799 if err := json .Unmarshal (body , & m ); err != nil {
98100 log .Error ().Err (err ).Msg ("unable to unmarshal JSON" )
99101
100- return "" , zerr .ErrBadManifest
102+ return ispec. Descriptor {} , zerr .ErrBadManifest
101103 }
102104 }
105+
106+ descriptor = ispec.Descriptor {
107+ MediaType : mediaType ,
108+ Digest : godigest .FromBytes (body ),
109+ Size : int64 (len (body )),
110+ ArtifactType : zcommon .GetManifestArtifactType (manifest ),
111+ }
103112 case oras .MediaTypeArtifactManifest :
104113 var m oras.Descriptor
105114 if err := json .Unmarshal (body , & m ); err != nil {
106115 log .Error ().Err (err ).Msg ("unable to unmarshal JSON" )
107116
108- return "" , zerr .ErrBadManifest
117+ return ispec.Descriptor {}, zerr .ErrBadManifest
118+ }
119+
120+ descriptor = ispec.Descriptor {
121+ MediaType : mediaType ,
122+ Digest : godigest .FromBytes (body ),
123+ Size : int64 (len (body )),
124+ ArtifactType : m .ArtifactType ,
109125 }
110126 }
111127
112- return "" , nil
128+ return descriptor , nil
113129}
114130
115131func validateOCIManifest (imgStore ImageStore , repo , reference string , manifest * ispec.Manifest , //nolint:unparam
0 commit comments