From e92b0fa629c07fc1f19d22dfa3f14c465fbc657e Mon Sep 17 00:00:00 2001 From: Weston Steimel Date: Wed, 1 Mar 2023 14:53:37 +0000 Subject: [PATCH] feat: rust toolchain binary cataloger (#1601) Signed-off-by: Weston Steimel --- syft/pkg/cataloger/binary/cataloger_test.go | 36 ++++++++++++++++++ .../cataloger/binary/default_classifiers.go | 20 ++++++++++ .../lib/libstd-f6f9eec1635e636a.dylib | Bin 0 -> 21301 bytes .../lib/libstd-16f2b65e77054c42.dylib | Bin 0 -> 28955 bytes .../lib/libstd-86aefecbddda356d.so | Bin 0 -> 2180 bytes 5 files changed, 56 insertions(+) create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.50.0/lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-x86_64-unknown-linux-musl/lib/libstd-86aefecbddda356d.so diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index faa8b2dcd66..d6f6ab15d20 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -439,6 +439,42 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("java-binary-ibm", "java"), }, }, + { + name: "positive-rust-1.50.0-macos", + fixtureDir: "test-fixtures/classifiers/positive/rust-1.50.0", + expected: pkg.Package{ + Name: "rust", + Version: "1.50.0", + Type: "binary", + PURL: "pkg:generic/rust@1.50.0", + Locations: locations("lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib"), + Metadata: metadata("rust-standard-library-macos"), + }, + }, + { + name: "positive-rust-1.67.1-macos", + fixtureDir: "test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin", + expected: pkg.Package{ + Name: "rust", + Version: "1.67.1", + Type: "binary", + PURL: "pkg:generic/rust@1.67.1", + Locations: locations("lib/libstd-16f2b65e77054c42.dylib"), + Metadata: metadata("rust-standard-library-macos"), + }, + }, + { + name: "positive-rust-1.67.1-linux", + fixtureDir: "test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-x86_64-unknown-linux-musl", + expected: pkg.Package{ + Name: "rust", + Version: "1.67.1", + Type: "binary", + PURL: "pkg:generic/rust@1.67.1", + Locations: locations("lib/libstd-86aefecbddda356d.so"), + Metadata: metadata("rust-standard-library-linux"), + }, + }, } for _, test := range tests { diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index 75e7befc3d5..da7bd1e206e 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -207,4 +207,24 @@ var defaultClassifiers = []classifier{ Package: "postgresql", PURL: mustPURL("pkg:generic/postgresql@version"), }, + { + Class: "rust-standard-library-linux", + FileGlob: "**/libstd-????????????????.so", + EvidenceMatcher: fileContentsVersionMatcher( + // clang LLVM (rustc version 1.48.0 (7eac88abb 2020-11-16)) + `(?m)(\x00)clang LLVM \(rustc version (?P[0-9]+(\.[0-9]+)?(\.[0-9]+)) \(\w+ \d{4}\-\d{2}\-\d{2}\)`), + Package: "rust", + PURL: mustPURL("pkg:generic/rust@version"), + CPEs: singleCPE("cpe:2.3:a:rust-lang:rust:*:*:*:*:*:*:*:*"), + }, + { + Class: "rust-standard-library-macos", + FileGlob: "**/libstd-????????????????.dylib", + EvidenceMatcher: fileContentsVersionMatcher( + // c 1.48.0 (7eac88abb 2020-11-16) + `(?m)c (?P[0-9]+(\.[0-9]+)?(\.[0-9]+)) \(\w+ \d{4}\-\d{2}\-\d{2}\)`), + Package: "rust", + PURL: mustPURL("pkg:generic/rust@version"), + CPEs: singleCPE("cpe:2.3:a:rust-lang:rust:*:*:*:*:*:*:*:*"), + }, } diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.50.0/lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.50.0/lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib new file mode 100644 index 0000000000000000000000000000000000000000..8b9c42c6b69a9a885e43394d1f3c928faf73e178 GIT binary patch literal 21301 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 W;f^5K8V^R`_%GK}1(XZ#6aE(%O>$uX literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib new file mode 100644 index 0000000000000000000000000000000000000000..d5949c118f02fee7c802bd96390c0d20913063f0 GIT binary patch literal 28955 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 literal 0 HcmV?d00001