From 11814302e2a165e1ec7425a9c403af5617c1ed36 Mon Sep 17 00:00:00 2001 From: Leonardo Di Giovanna Date: Mon, 13 Apr 2026 17:31:08 +0200 Subject: [PATCH] fix(kernelrelease): fix parsing for kern ver specifying just the major Allow parsing kernel version string specifying just the major number, like "7". Notice that this is required in order to be flexible to situations in which the user specifies something like 7.0 (unquoted) in the configuration and the YAML parser drops the ".0" while converting the value (recognized as a float number) to string. Signed-off-by: Leonardo Di Giovanna --- pkg/kernelrelease/kernelrelease.go | 6 ++++-- pkg/kernelrelease/kernelrelease_test.go | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/kernelrelease/kernelrelease.go b/pkg/kernelrelease/kernelrelease.go index 2b414b93..f7c49540 100644 --- a/pkg/kernelrelease/kernelrelease.go +++ b/pkg/kernelrelease/kernelrelease.go @@ -25,7 +25,7 @@ import ( ) var ( - kernelVersionPattern = regexp.MustCompile(`(?P^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)[.+]?(?P0|[1-9]\d*)?)(?P[-.+](?P\d+|\d*[a-zA-Z-][0-9a-zA-Z-]*)?([\.+~](\d+|\d*[a-zA-Z-][0-9a-zA-Z-_]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$`) + kernelVersionPattern = regexp.MustCompile(`(?P^(?P0|[1-9]\d*)(?:\.(?P0|[1-9]\d*)[.+]?(?P0|[1-9]\d*)?)?)(?P[-.+](?P\d+|\d*[a-zA-Z-][0-9a-zA-Z-]*)?([\.+~](\d+|\d*[a-zA-Z-][0-9a-zA-Z-_]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$`) ) const ( @@ -110,7 +110,9 @@ func FromString(kernelVersionStr string) KernelRelease { case "version": kv.Major, err = strconv.ParseUint(match[i], 10, 64) case "patchlevel": - kv.Minor, err = strconv.ParseUint(match[i], 10, 64) + if len(match[i]) > 0 { + kv.Minor, err = strconv.ParseUint(match[i], 10, 64) + } case "sublevel": if len(match[i]) > 0 { // We accept a missing sublevel (defaulting to 0) diff --git a/pkg/kernelrelease/kernelrelease_test.go b/pkg/kernelrelease/kernelrelease_test.go index a38f0bfb..dd454d26 100644 --- a/pkg/kernelrelease/kernelrelease_test.go +++ b/pkg/kernelrelease/kernelrelease_test.go @@ -40,6 +40,17 @@ func TestFromString(t *testing.T) { FullExtraversion: "-arch1-1", }, }, + "just major version": { + kernelVersionStr: "7", + want: KernelRelease{ + Fullversion: "7", + Version: semver.Version{ + Major: 7, + }, + Extraversion: "", + FullExtraversion: "", + }, + }, "version RC": { kernelVersionStr: "6.4-rc1", want: KernelRelease{