From 21373226a3eb754ef79f6c2a809781ebb87e97a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9ry=20Mathieu=20=28Mathius=29?= Date: Thu, 5 Nov 2026 00:05:21 +0100 Subject: [PATCH] feat(phpver): Allow parsing of php version without patch specification (We assume is patch 0 in this case) --- internal/blackbox/blackbox.go | 4 ++-- internal/phpver/phpver.go | 7 +++++-- internal/phpver/phpver_test.go | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/blackbox/blackbox.go b/internal/blackbox/blackbox.go index 50cfb1d..1cb7e1b 100644 --- a/internal/blackbox/blackbox.go +++ b/internal/blackbox/blackbox.go @@ -43,8 +43,8 @@ var defaultPaths = []string{ } var ( - poweredByRe = regexp.MustCompile(`PHP/(\d+\.\d+\.\d+)`) - versionRe = regexp.MustCompile(`PHP Version (\d+\.\d+\.\d+)`) + poweredByRe = regexp.MustCompile(`PHP/(\d+\.\d+(\.\d+)?)`) + versionRe = regexp.MustCompile(`PHP Version (\d+\.\d+(\.\d+)?)`) phpinfoRow = regexp.MustCompile(`(?s)]*class="e"[^>]*>(.*?)\s*]*class="v"[^>]*>(.*?)`) tagRe = regexp.MustCompile(`(?s)<[^>]+>`) ) diff --git a/internal/phpver/phpver.go b/internal/phpver/phpver.go index 8ee1490..40f9d53 100644 --- a/internal/phpver/phpver.go +++ b/internal/phpver/phpver.go @@ -29,7 +29,7 @@ func (v Version) Less(o Version) bool { } } -var verRe = regexp.MustCompile(`(\d+)\.(\d+)\.(\d+)`) +var verRe = regexp.MustCompile(`(\d+)\.(\d+)(\.(\d+))?`) // Parse extracts a version from a string such as "PHP 8.3.35 (cli)". func Parse(s string) (Version, bool) { @@ -39,7 +39,10 @@ func Parse(s string) (Version, bool) { } ma, _ := strconv.Atoi(m[1]) mi, _ := strconv.Atoi(m[2]) - pa, _ := strconv.Atoi(m[3]) + pa := 0 + if m[3] != "" { + pa , _ = strconv.Atoi(m[3]) + } return Version{Major: ma, Minor: mi, Patch: pa}, true } diff --git a/internal/phpver/phpver_test.go b/internal/phpver/phpver_test.go index 7176088..a5242f0 100644 --- a/internal/phpver/phpver_test.go +++ b/internal/phpver/phpver_test.go @@ -17,6 +17,8 @@ func TestAssess(t *testing.T) { {"8.5.12", StatePatched}, {"8.1.29", StateEOL}, {"7.4.33", StateEOL}, + {"7.0.0", StateEOL}, + {"7.0", StateEOL}, {"8.6.0", StateUnknown}, } for _, c := range cases {