diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index 879617bce..6724e6d80 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -513,6 +513,16 @@ func Test_Cataloger_PositiveCases(t *testing.T) { }, }, }, + { + logicalFixture: "pypy-shared-lib/7.3.14/linux-amd64", + expected: pkg.Package{ + Name: "pypy", + Version: "7.3.14", + PURL: "pkg:generic/pypy@7.3.14", + Locations: locations("libpypy3.9-c.so"), + Metadata: metadata("pypy-binary-lib"), + }, + }, { logicalFixture: "go/1.21.3/linux-amd64", expected: pkg.Package{ diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index 8f54fd899..6adc136fb 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -38,6 +38,14 @@ func DefaultClassifiers() []Classifier { cpe.Must("cpe:2.3:a:python:python:*:*:*:*:*:*:*:*"), }, }, + { + Class: "pypy-binary-lib", + FileGlob: "**/libpypy*.so*", + EvidenceMatcher: FileContentsVersionMatcher( + `(?m)\[PyPy (?P[0-9]+\.[0-9]+\.[0-9]+)`), + Package: "pypy", + PURL: mustPURL("pkg:generic/pypy@version"), + }, { Class: "go-binary", FileGlob: "**/go", diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/pypy-shared-lib/7.3.14/linux-amd64/libpypy3.9-c.so b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/pypy-shared-lib/7.3.14/linux-amd64/libpypy3.9-c.so new file mode 100644 index 000000000..1a53577db Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/pypy-shared-lib/7.3.14/linux-amd64/libpypy3.9-c.so differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/config.yaml b/syft/pkg/cataloger/binary/test-fixtures/config.yaml index f34203570..05632221d 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/config.yaml +++ b/syft/pkg/cataloger/binary/test-fixtures/config.yaml @@ -232,6 +232,14 @@ from-images: paths: - /usr/local/lib/libpython3.7m.so.1.0 + - name: pypy-shared-lib + version: 7.3.14 + images: + - ref: pypy:3.9-7.3.14-slim-bullseye@sha256:058f1a0c073534e535aed3d45c1982648378167901a05a0f35056006bf2e13bc + platform: linux/amd64 + paths: + - /opt/pypy/bin/libpypy3.9-c.so + - version: 2.8.23 images: - ref: redis:2.8.23@sha256:e507029ca6a11b85f8628ff16d7ff73ae54582f16fd757e64431f5ca6d27a13c