From 2c96279df99fb3ba9c9d38cce3fe0e1f74eabb4a Mon Sep 17 00:00:00 2001 From: Rez Moss Date: Mon, 5 Jan 2026 11:14:00 -0500 Subject: [PATCH] fix: traefik binary classifier (#4499) Signed-off-by: Rez Moss --- .../cataloger/binary/classifier_cataloger_test.go | 11 +++++++++++ syft/pkg/cataloger/binary/classifiers.go | 2 +- .../classifiers/negative/traefik/traefik | Bin 0 -> 10 bytes .../snippets/traefik/3.6.5/linux-amd64/traefik | Bin 0 -> 353 bytes .../cataloger/binary/test-fixtures/config.yaml | 7 +++++++ 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/negative/traefik/traefik create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/3.6.5/linux-amd64/traefik diff --git a/syft/pkg/cataloger/binary/classifier_cataloger_test.go b/syft/pkg/cataloger/binary/classifier_cataloger_test.go index d56878f7b..4f839da2d 100644 --- a/syft/pkg/cataloger/binary/classifier_cataloger_test.go +++ b/syft/pkg/cataloger/binary/classifier_cataloger_test.go @@ -227,6 +227,17 @@ func Test_Cataloger_PositiveCases(t *testing.T) { Metadata: metadata("traefik-binary"), }, }, + { + logicalFixture: "traefik/3.6.5/linux-amd64", + expected: pkg.Package{ + Name: "traefik", + Version: "3.6.5", + Type: "binary", + PURL: "pkg:generic/traefik@3.6.5", + Locations: locations("traefik"), + Metadata: metadata("traefik-binary"), + }, + }, { logicalFixture: "memcached/1.6.18/linux-amd64", expected: pkg.Package{ diff --git a/syft/pkg/cataloger/binary/classifiers.go b/syft/pkg/cataloger/binary/classifiers.go index 4e7c13ff7..99a8aafc1 100644 --- a/syft/pkg/cataloger/binary/classifiers.go +++ b/syft/pkg/cataloger/binary/classifiers.go @@ -224,7 +224,7 @@ func DefaultClassifiers() []binutils.Classifier { // [NUL]v1.7.34[NUL] // [NUL]2.9.6[NUL] // 3.0.4[NUL] - `(?m)(\x00|\x{FFFD})?v?(?P[0-9]+\.[0-9]+\.[0-9]+(-alpha[0-9]|-beta[0-9]|-rc[0-9])?)\x00`), + `(?m)(\x00v?|\x{FFFD}.?)(?P[0-9]+\.[0-9]+\.[0-9]+(-alpha[0-9]|-beta[0-9]|-rc[0-9])?)\x00`), Package: "traefik", PURL: mustPURL("pkg:generic/traefik@version"), CPEs: singleCPE("cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/negative/traefik/traefik b/syft/pkg/cataloger/binary/test-fixtures/classifiers/negative/traefik/traefik new file mode 100644 index 0000000000000000000000000000000000000000..874b31c580d65f9e9e726041b02204648639bb7e GIT binary patch literal 10 RcmYe#H`FsS(K9q;000i20xSRk literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/3.6.5/linux-amd64/traefik b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/3.6.5/linux-amd64/traefik new file mode 100644 index 0000000000000000000000000000000000000000..0be4d256776a5b6c65934b34028dec5b3e68e27a GIT binary patch literal 353 zcmY+8y-EW?6otnk%`_HTS`4g(AcUFS`AuUUz)tL)pL@;Xx*N=bSf%j|1hMpK?5y(| zzQH;PyG1S>zQZ}(%WeHLELi{I0qZB)A#R{wFi{F8q%@i~&_4F7eZuLct=DVl?^eE4 zI!7Rp+hC)L7Gz8TvP)pg7?tD>gEKrzSs5Rsh7>ebiW@Lia|qTNigg3iv1C&T+zAg{ zM~5D*GSYd?m5t!?o(~8nq0!nWj!;U;g$7i~7@I&)S`-BfZ#}T_P1bh|yQb-0S+3|X zY`0khA>X&>AMY1uS=C(66(Qu(|HhNdX-+3|;NK1T+|BlOdH-|7heJ;YA9+3UYUJ{3 GH~R-qhgjqQ literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/config.yaml b/syft/pkg/cataloger/binary/test-fixtures/config.yaml index a2c012f1b..a4a834f02 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/config.yaml +++ b/syft/pkg/cataloger/binary/test-fixtures/config.yaml @@ -587,6 +587,13 @@ from-images: paths: - /usr/local/bin/traefik + - version: 3.6.5 + images: + - ref: traefik:v3.6.5@sha256:d944e3693bbf5a361ddd2e411bb713049cfb4f5ff3da200b30ee7a347dbd6abd + platform: linux/amd64 + paths: + - /usr/local/bin/traefik + # from the original dynamic fixtures... - name: python-rhel-shared-libs