From 15364e925e4160d9ba9f55df720b0747fd81b79d Mon Sep 17 00:00:00 2001 From: Haihan Jiang Date: Sun, 24 May 2026 08:17:43 -0700 Subject: [PATCH] Parse suffixed Docker versions strictly --- container/docker/docker.go | 2 +- container/docker/docker_test.go | 6 ++++-- container/docker/factory.go | 12 +++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/container/docker/docker.go b/container/docker/docker.go index 2f72f4b787..e8e25730f0 100644 --- a/container/docker/docker.go +++ b/container/docker/docker.go @@ -114,7 +114,7 @@ func ValidateInfo(GetInfo func() (*dockersystem.Info, error), ServerVersion func } } - version, err := ParseVersion(info.ServerVersion, VersionRe, 3) + version, err := ParseVersion(info.ServerVersion, dockerVersionRe, 3) if err != nil { return nil, err } diff --git a/container/docker/docker_test.go b/container/docker/docker_test.go index cef2e13221..fd2166a696 100644 --- a/container/docker/docker_test.go +++ b/container/docker/docker_test.go @@ -30,8 +30,10 @@ func TestParseDockerAPIVersion(t *testing.T) { expected []int expectedError string }{ - {"17.03.0", VersionRe, 3, []int{17, 03, 0}, ""}, - {"17.a3.0", VersionRe, 3, []int{}, `version string "17.a3.0" doesn't match expected regular expression: "(\d+)\.(\d+)\.(\d+)"`}, + {"17.03.0", dockerVersionRe, 3, []int{17, 03, 0}, ""}, + {"v20.10.12-v1.0.2", dockerVersionRe, 3, []int{20, 10, 12}, ""}, + {"17.a3.0", dockerVersionRe, 3, []int{}, `version string "17.a3.0" doesn't match expected regular expression: "^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$"`}, + {"random text 1.2.3 and also 9.9.9 build", dockerVersionRe, 3, []int{}, `version string "random text 1.2.3 and also 9.9.9 build" doesn't match expected regular expression: "^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$"`}, {"1.20", apiVersionRe, 2, []int{1, 20}, ""}, {"1.a", apiVersionRe, 2, []int{}, `version string "1.a" doesn't match expected regular expression: "(\d+)\.(\d+)"`}, } diff --git a/container/docker/factory.go b/container/docker/factory.go index 28d2bd8420..4818a285e4 100644 --- a/container/docker/factory.go +++ b/container/docker/factory.go @@ -193,10 +193,12 @@ func (f *dockerFactory) DebugInfo() map[string][]string { } var ( - versionRegexpString = `(\d+)\.(\d+)\.(\d+)` - VersionRe = regexp.MustCompile(versionRegexpString) - apiVersionRegexpString = `(\d+)\.(\d+)` - apiVersionRe = regexp.MustCompile(apiVersionRegexpString) + versionRegexpString = `(\d+)\.(\d+)\.(\d+)` + VersionRe = regexp.MustCompile(versionRegexpString) + dockerVersionRegexpString = `^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$` + dockerVersionRe = regexp.MustCompile(dockerVersionRegexpString) + apiVersionRegexpString = `(\d+)\.(\d+)` + apiVersionRe = regexp.MustCompile(apiVersionRegexpString) ) func StartThinPoolWatcher(dockerInfo *dockersystem.Info) (*devicemapper.ThinPoolWatcher, error) { @@ -320,7 +322,7 @@ func Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics } // Version already validated above, assume no error here. - dockerVersion, _ := ParseVersion(dockerInfo.ServerVersion, VersionRe, 3) + dockerVersion, _ := ParseVersion(dockerInfo.ServerVersion, dockerVersionRe, 3) dockerAPIVersion, _ := APIVersion()