From d10756f356a4c67c6ed933692a17b66ff605d36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Tue, 6 Feb 2024 16:10:23 +0100 Subject: [PATCH] image/cache: Require Major and Minor match for Windows OSVersion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The platform comparison was backported from the branch that vendors containerd 1.7. In this branch the vendored containerd version is older and doesn't have the same comparison logic for Windows specific OSVersion. Require both major and minor components of Windows OSVersion to match. Signed-off-by: Paweł Gronowski (cherry picked from commit b3888ed89951e568c1bf33b5223e3e515019e87f) Signed-off-by: Paweł Gronowski --- image/cache/compare.go | 7 +++++++ image/cache/compare_test.go | 6 ------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/image/cache/compare.go b/image/cache/compare.go index c13b11a06d..7633b0e966 100644 --- a/image/cache/compare.go +++ b/image/cache/compare.go @@ -26,6 +26,13 @@ func comparePlatform(builderPlatform, imagePlatform ocispec.Platform) bool { builderParts := strings.Split(builderPlatform.OSVersion, ".") imageParts := strings.Split(imagePlatform.OSVersion, ".") + // Major and minor must match. + for i := 0; i < 2; i++ { + if len(builderParts) > i && len(imageParts) > i && builderParts[i] != imageParts[i] { + return false + } + } + if len(builderParts) >= 3 && len(imageParts) >= 3 { // Keep only Major & Minor. builderParts[0] = imageParts[0] diff --git a/image/cache/compare_test.go b/image/cache/compare_test.go index 8d6ce735e2..7cffbdad1b 100644 --- a/image/cache/compare_test.go +++ b/image/cache/compare_test.go @@ -193,12 +193,6 @@ func TestPlatformCompare(t *testing.T) { }, } { tc := tc - // OSVersion comparison is only performed by containerd platform - // matcher if built on Windows. - if (tc.image.OSVersion != "" || tc.builder.OSVersion != "") && runtime.GOOS != "windows" { - continue - } - t.Run(tc.name, func(t *testing.T) { assert.Check(t, is.Equal(comparePlatform(tc.builder, tc.image), tc.expected)) })