fix: improve haskell classifiers (#4793)

Signed-off-by: witchcraze <witchcraze@gmail.com>
This commit is contained in:
witchcraze 2026-04-21 01:23:35 +09:00 committed by GitHub
parent 66ba575ae2
commit ff6c34de7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 76 additions and 4 deletions

View File

@ -1364,6 +1364,28 @@ func Test_Cataloger_PositiveCases(t *testing.T) {
Metadata: metadata("deno-binary"),
},
},
{
logicalFixture: "haskell-ghc/7.10.3/linux-amd64",
expected: pkg.Package{
Name: "haskell/ghc",
Version: "7.10.3",
Type: "binary",
PURL: "pkg:generic/haskell/ghc@7.10.3",
Locations: locations("ghc"),
Metadata: metadata("haskell-ghc-binary"),
},
},
{
logicalFixture: "haskell-ghc/8.10.4/linux-amd64",
expected: pkg.Package{
Name: "haskell/ghc",
Version: "8.10.4",
Type: "binary",
PURL: "pkg:generic/haskell/ghc@8.10.4",
Locations: locations("ghc"),
Metadata: metadata("haskell-ghc-binary"),
},
},
{
logicalFixture: "haskell-ghc/9.6.5/linux-amd64",
expected: pkg.Package{
@ -1375,6 +1397,17 @@ func Test_Cataloger_PositiveCases(t *testing.T) {
Metadata: metadata("haskell-ghc-binary"),
},
},
{
logicalFixture: "haskell-cabal/1.22.6.0/linux-amd64",
expected: pkg.Package{
Name: "haskell/cabal",
Version: "1.22.6.0",
Type: "binary",
PURL: "pkg:generic/haskell/cabal@1.22.6.0",
Locations: locations("cabal"),
Metadata: metadata("haskell-cabal-binary"),
},
},
{
logicalFixture: "haskell-cabal/3.10.3.0/linux-amd64",
expected: pkg.Package{

View File

@ -438,9 +438,16 @@ func DefaultClassifiers() []binutils.Classifier {
{
Class: "haskell-ghc-binary",
FileGlob: "**/ghc*",
EvidenceMatcher: m.FileContentsVersionMatcher(
EvidenceMatcher: binutils.MatchAny(
m.FileContentsVersionMatcher(
`(?m)\x00GHC (?P<version>[0-9]+\.[0-9]+\.[0-9]+)\x00`,
),
m.FileContentsVersionMatcher(
// [NUL]libHSghc-7.10.3-0AG9TOjDEtx4Ji3wSwHOBe-ghc7.10.3.so[NUL]
// [NUL]libHSghc-8.10.4-ghc8.10.4.so[NUL]
`\x00libHSghc\-(?P<version>[0-9]+\.[0-9]+\.[0-9]+)\-([a-zA-Z0-9]+\-)?ghc[0-9]+\.[0-9]+\.[0-9]+\.so\x00`,
),
),
Package: "haskell/ghc",
PURL: mustPURL("pkg:generic/haskell/ghc@version"),
CPEs: singleCPE("cpe:2.3:a:haskell:ghc:*:*:*:*:*:*:*:*"),
@ -448,9 +455,15 @@ func DefaultClassifiers() []binutils.Classifier {
{
Class: "haskell-cabal-binary",
FileGlob: "**/cabal",
EvidenceMatcher: m.FileContentsVersionMatcher(
EvidenceMatcher: binutils.MatchAny(
m.FileContentsVersionMatcher(
`(?m)\x00Cabal-(?P<version>[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?)-`,
),
m.FileContentsVersionMatcher(
// [NUL][NUL][NUL]/opt/cabal/1.22/lib/x86_64-linux-ghc-7.10.2/cabal-install-1.22.6.0-AfxbHivcmw40BMGrAXG3jJ[NUL][NUL][NUL]
`\x00.{0,50}cabal\-install\-(?P<version>[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?)\-[a-zA-Z0-9]+\x00+`,
),
),
Package: "haskell/cabal",
PURL: mustPURL("pkg:generic/haskell/cabal@version"),
CPEs: singleCPE("cpe:2.3:a:haskell:cabal:*:*:*:*:*:*:*:*"),

View File

@ -147,6 +147,23 @@ from-images:
paths:
- /usr/bin/deno
# haskell:7.10.3 detail information is missing.
- name: haskell-ghc
version: 7.10.3
images:
- ref: haskell:7.10.3
platform: linux/amd64
paths:
- /opt/ghc/7.10.3/lib/ghc-7.10.3/bin/ghc
- name: haskell-ghc
version: 8.10.4
images:
- ref: haskell:8.10.4@sha256:30ecdaee0fd59cdcddf004a68c2d8995ba4212a64106abc3e411742c606e59ac
platform: linux/amd64
paths:
- /opt/ghc/8.10.4/lib/ghc-8.10.4/bin/ghc
- name: haskell-ghc
version: 9.6.5
images:
@ -155,6 +172,15 @@ from-images:
paths:
- /opt/ghc/9.6.5/lib/ghc-9.6.5/bin/ghc-9.6.5
# haskell:7.10.3 detail information is missing.
- name: haskell-cabal
version: 1.22.6.0
images:
- ref: haskell:7.10.3
platform: linux/amd64
paths:
- /opt/cabal/1.22/bin/cabal
- name: haskell-cabal
version: 3.10.3.0
images: