@@ -240,13 +240,12 @@ type descWithSource struct {
240240}
241241
242242func filterPlatforms (dt []byte , desc ocispecs.Descriptor , srcMap map [digest.Digest ]* imagetools.Source , plats []ocispecs.Platform ) ([]byte , ocispecs.Descriptor , []descWithSource , error ) {
243- if len (plats ) == 0 {
244- return dt , desc , nil , nil
245- }
246-
247243 matcher := platforms .Any (plats ... )
248244
249245 if ! images .IsIndexType (desc .MediaType ) {
246+ if len (plats ) == 0 {
247+ return dt , desc , nil , nil
248+ }
250249 var mfst ocispecs.Manifest
251250 if err := json .Unmarshal (dt , & mfst ); err != nil {
252251 return nil , ocispecs.Descriptor {}, nil , errors .Wrapf (err , "failed to parse manifest" )
@@ -264,6 +263,24 @@ func filterPlatforms(dt []byte, desc ocispecs.Descriptor, srcMap map[digest.Dige
264263 if err := json .Unmarshal (dt , & idx ); err != nil {
265264 return nil , ocispecs.Descriptor {}, nil , errors .Wrapf (err , "failed to parse index" )
266265 }
266+ if len (plats ) == 0 {
267+ mfsts := make ([]descWithSource , len (idx .Manifests ))
268+ for i , m := range idx .Manifests {
269+ src , ok := srcMap [m .Digest ]
270+ if ! ok {
271+ defaultSource , ok := srcMap [desc .Digest ]
272+ if ! ok {
273+ return nil , ocispecs.Descriptor {}, nil , errors .Errorf ("internal error: no source found for %s" , m .Digest )
274+ }
275+ src = defaultSource
276+ }
277+ mfsts [i ] = descWithSource {
278+ Descriptor : m ,
279+ Source : src ,
280+ }
281+ }
282+ return dt , desc , mfsts , nil
283+ }
267284
268285 manifestMap := map [digest.Digest ]ocispecs.Descriptor {}
269286 for _ , m := range idx .Manifests {
0 commit comments