Преглед на файлове

distribution: use correct platform matcher for containerd

This uses the correct comparison with compatibility
checks for variants.

The deprecated arm variant matcher is left as is.
Although it is not needed for valid cases it is not
fully compatible as also matches some invalid
combinations, so should be removed separately.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Tonis Tiigi преди 3 години
родител
ревизия
fcc42d5682
променени са 1 файла, в които са добавени 6 реда и са изтрити 1 реда
  1. 6 1
      distribution/pull_v2_unix.go

+ 6 - 1
distribution/pull_v2_unix.go

@@ -5,6 +5,7 @@ package distribution // import "github.com/docker/docker/distribution"
 
 import (
 	"context"
+	"sort"
 
 	"github.com/containerd/containerd/platforms"
 	"github.com/docker/distribution"
@@ -20,7 +21,7 @@ func (ld *v2LayerDescriptor) open(ctx context.Context) (distribution.ReadSeekClo
 
 func filterManifests(manifests []manifestlist.ManifestDescriptor, p specs.Platform) []manifestlist.ManifestDescriptor {
 	p = platforms.Normalize(withDefault(p))
-	m := platforms.NewMatcher(p)
+	m := platforms.Only(p)
 	var matches []manifestlist.ManifestDescriptor
 	for _, desc := range manifests {
 		if m.Match(toOCIPlatform(desc.Platform)) {
@@ -29,6 +30,10 @@ func filterManifests(manifests []manifestlist.ManifestDescriptor, p specs.Platfo
 		}
 	}
 
+	sort.SliceStable(matches, func(i, j int) bool {
+		return m.Less(toOCIPlatform(matches[i].Platform), toOCIPlatform(matches[j].Platform))
+	})
+
 	// deprecated: backwards compatibility with older versions that didn't compare variant
 	if len(matches) == 0 && p.Architecture == "arm" {
 		p = platforms.Normalize(p)