From 103db0589ef840be67598140ed1190440b8cd6b3 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Mon, 19 May 2025 15:09:38 +1200 Subject: [PATCH] fix(semantic): parse Alpine versions with dots that are not followed by a digit --- semantic/testdata/alpine-versions.txt | 11 +++++++++++ semantic/version-alpine.go | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/semantic/testdata/alpine-versions.txt b/semantic/testdata/alpine-versions.txt index 53bc7e3d..53258da2 100644 --- a/semantic/testdata/alpine-versions.txt +++ b/semantic/testdata/alpine-versions.txt @@ -12,6 +12,17 @@ 1.2.3b > 1.2.0d +0.r1 < 0r2 +0..1..0 < 0..1..1 +0...1...0 < 0...1...1 +0...1...0.r1 < 0...1...0.r2 +0...1...0r1 < 0...1...0r2 +0..8 = 0..8 +0..8 > 0...8 +0.8.21.r2 > 0.8.21.r1 +10.2.24.r0 > 10.2.22.r0 +0.8.21.r2 < 0.8.21r2 + # letters (invalid) - note on latest apk these are "<" but on 3.x line they're ">" 1.2.0A < 1.2.0d 1.2.0D < 1.2.0d diff --git a/semantic/version-alpine.go b/semantic/version-alpine.go index 70ab2967..26323b14 100644 --- a/semantic/version-alpine.go +++ b/semantic/version-alpine.go @@ -255,6 +255,12 @@ func parseAlpineNumberComponents(v *alpineVersion, str string) (string, error) { } for i, d := range strings.Split(sub, ".") { + // while technically not allowed by the spec, currently apk does not + // consider it invalid to have a dot that isn't followed by a digit + if d == "" { + break + } + value, err := convertToBigInt(d) if err != nil {