From 476ce60768a86d77c4d286561ca430dd01621e4d Mon Sep 17 00:00:00 2001 From: Yashas Gunderia <68075205+ychampion@users.noreply.github.com> Date: Wed, 29 Jul 2026 22:03:46 +0530 Subject: [PATCH] fix(binary): detect Deno 1.11 and 2.9 versions Signed-off-by: ychampion Co-authored-by: ychampion --- .../binary/classifier_cataloger_test.go | 33 ++++++++++++++++++ syft/pkg/cataloger/binary/classifiers.go | 9 +++++ .../snippets/deno/1.11.3/linux-amd64/deno | 9 +++++ .../snippets/deno/1.11.4/linux-amd64/deno | 9 +++++ .../snippets/deno/2.9.2/linux-amd64/deno | Bin 0 -> 349 bytes .../pkg/cataloger/binary/testdata/config.yaml | 24 +++++++++++++ 6 files changed, 84 insertions(+) create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.3/linux-amd64/deno create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.4/linux-amd64/deno create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/2.9.2/linux-amd64/deno diff --git a/syft/pkg/cataloger/binary/classifier_cataloger_test.go b/syft/pkg/cataloger/binary/classifier_cataloger_test.go index b620a8674..8a44fc13a 100644 --- a/syft/pkg/cataloger/binary/classifier_cataloger_test.go +++ b/syft/pkg/cataloger/binary/classifier_cataloger_test.go @@ -1499,6 +1499,28 @@ func Test_Cataloger_PositiveCases(t *testing.T) { Metadata: metadata("deno-binary"), }, }, + { + logicalFixture: "deno/1.11.3/linux-amd64", + expected: pkg.Package{ + Name: "deno", + Version: "1.11.3", + Type: "binary", + PURL: "pkg:generic/deno@1.11.3", + Locations: locations("deno"), + Metadata: metadata("deno-binary"), + }, + }, + { + logicalFixture: "deno/1.11.4/linux-amd64", + expected: pkg.Package{ + Name: "deno", + Version: "1.11.4", + Type: "binary", + PURL: "pkg:generic/deno@1.11.4", + Locations: locations("deno"), + Metadata: metadata("deno-binary"), + }, + }, { logicalFixture: "deno/1.16.4/linux-amd64", expected: pkg.Package{ @@ -1565,6 +1587,17 @@ func Test_Cataloger_PositiveCases(t *testing.T) { Metadata: metadata("deno-binary"), }, }, + { + logicalFixture: "deno/2.9.2/linux-amd64", + expected: pkg.Package{ + Name: "deno", + Version: "2.9.2", + Type: "binary", + PURL: "pkg:generic/deno@2.9.2", + Locations: locations("deno"), + Metadata: metadata("deno-binary"), + }, + }, { logicalFixture: "bun/0.5.9/linux-amd64", expected: pkg.Package{ diff --git a/syft/pkg/cataloger/binary/classifiers.go b/syft/pkg/cataloger/binary/classifiers.go index 212f244a2..afd4c7536 100644 --- a/syft/pkg/cataloger/binary/classifiers.go +++ b/syft/pkg/cataloger/binary/classifiers.go @@ -588,11 +588,20 @@ func DefaultClassifiers() []binutils.Classifier { Class: "deno-binary", FileGlob: "**/deno", EvidenceMatcher: binutils.MatchAny( + m.FileContentsVersionMatcher( + // Deno/2.6.3Deno/ + // Deno/1.41.0cli/ + `Deno/(?P[0-9]+\.[0-9]+\.[0-9]+)(Deno/|cli/)`, + ), m.FileContentsVersionMatcher( // Deno/2.6.3 // Deno/1.41.0 `Deno/(?P[0-9]+\.[0-9]+\.[0-9]+)`, ), + m.FileContentsVersionMatcher( + // cli/tools/standalone.rsdeno-canary/f4bed1081456089559c82441a13c4fb700840cac1.11.3dlwindows + `deno-canary/[0-9a-z]{40}(?P[0-9]+\.[0-9]+\.[0-9]+)`, + ), m.FileContentsVersionMatcher( // deno::tools::standalonedeno-65db94feba9d4d51a09b74629f566dbc90484fbarelease/v1.29.4windows // cli/tools/standalone.rsdeno-74064c9d8c222b33b2a552ea0af1054f57002a96release/v1.28.3windows diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.3/linux-amd64/deno b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.3/linux-amd64/deno new file mode 100644 index 000000000..448f0f90e --- /dev/null +++ b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.3/linux-amd64/deno @@ -0,0 +1,9 @@ +name: deno +offset: 4221667 +length: 120 +snippetSha256: 89509d15b73fd2d901b20ebfe82c67fd27f70e7b01dcbf376e7e80e6c80f97d9 +fileSha256: 530a95c93ddfa41bd4d72d665e677d5af9a4275f1520e638305e60af5083a6d6 + +### byte snippet to follow ### +g ctrl+d or close() +Error: Uncaught cli/tools/standalone.rsdeno-canary/f4bed1081456089559c82441a13c4fb700840cac1.11.3dlw \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.4/linux-amd64/deno b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.4/linux-amd64/deno new file mode 100644 index 000000000..4d8d16dbd --- /dev/null +++ b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/1.11.4/linux-amd64/deno @@ -0,0 +1,9 @@ +name: deno +offset: 4225763 +length: 120 +snippetSha256: b47e8cf36bdf93e4bc63a2d7bd0a5d759975f12751a66908661777eba7e90025 +fileSha256: 1a55c23bb0b666d1b26d9d16f3a9d27210b6b13421031f7f18ff18abfcb8664f + +### byte snippet to follow ### +g ctrl+d or close() +Error: Uncaught cli/tools/standalone.rsdeno-canary/ed16f4332263e81bf00a39ebc2200291b1fcbb8e1.11.4dlw \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/2.9.2/linux-amd64/deno b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/deno/2.9.2/linux-amd64/deno new file mode 100644 index 0000000000000000000000000000000000000000..44ce7dbe4c0fe32945de7de28469ffeb01957127 GIT binary patch literal 349 zcmYL^K~4iP3`JRI%LO8Ji8Lg3;v}=?23!C;acHGsrfNr^?zkE^W2joO`+EP&dY<`1 zN85B>%+mW=*UHNO#N9)0v^L#iSb$#74L>jH@+ImtT^)dJ6K%4+l3e+V9 zpM$hWoC;*G-PaT=sUz=Vf`CoP^uwh0V^M16#DNJik`pYxHRTH0xu&MID5VW=TGTRn z>0WawE;)+PCp2ca+gZ7+YHyl$U2I>bY5B5SWmqPyJoD*ts?&Ogp$zc%@~57z`3WOc skMOdw=PUV7_wF{)MsBkyf+1pL$eVXTUywPA5COV literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/config.yaml b/syft/pkg/cataloger/binary/testdata/config.yaml index 3bab3a99c..9e6197353 100644 --- a/syft/pkg/cataloger/binary/testdata/config.yaml +++ b/syft/pkg/cataloger/binary/testdata/config.yaml @@ -140,6 +140,22 @@ from-images: paths: - /usr/bin/deno + - name: deno + version: 1.11.3 + images: + - ref: denoland/deno:1.11.3@sha256:340d071dc71c8403c75713694db04f59b8cb7f6c7244798cd7447d55f2750596 + platform: linux/amd64 + paths: + - /usr/bin/deno + + - name: deno + version: 1.11.4 + images: + - ref: denoland/deno:1.11.4@sha256:8e9a449a50b71c779ad1c10ec79055b20a331e78a3852818fac47bc3e85b49f4 + platform: linux/amd64 + paths: + - /usr/bin/deno + - name: deno version: 1.16.4 images: @@ -188,6 +204,14 @@ from-images: paths: - /usr/bin/deno + - name: deno + version: 2.9.2 + images: + - ref: denoland/deno:ubuntu-2.9.2@sha256:0d27941f871700ebd95953c36fb1a817135c20f5afe3a645935672dfab72b2e9 + platform: linux/amd64 + paths: + - /usr/bin/deno + # haskell:7.10.3 detail information is missing. - name: haskell-ghc version: 7.10.3