diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index 6e916271de7..4e2eb4d0810 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -173,6 +173,48 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { }, }, }, + { + name: "positive-perl-5.12.5", + fixtureDir: "test-fixtures/classifiers/positive/perl-5.12.5", + expected: pkg.Package{ + Name: "perl", + Version: "5.12.5", + Type: "binary", + PURL: "pkg:generic/perl@5.12.5", + Locations: singleLocation("perl"), + Metadata: pkg.BinaryMetadata{ + Classifier: "perl-binary", + }, + }, + }, + { + name: "positive-perl-5.20.0", + fixtureDir: "test-fixtures/classifiers/positive/perl-5.20.0", + expected: pkg.Package{ + Name: "perl", + Version: "5.20.0", + Type: "binary", + PURL: "pkg:generic/perl@5.20.0", + Locations: singleLocation("perl"), + Metadata: pkg.BinaryMetadata{ + Classifier: "perl-binary", + }, + }, + }, + { + name: "positive-perl-5.37.8", + fixtureDir: "test-fixtures/classifiers/positive/perl-5.37.8", + expected: pkg.Package{ + Name: "perl", + Version: "5.37.8", + Type: "binary", + PURL: "pkg:generic/perl@5.37.8", + Locations: singleLocation("perl"), + Metadata: pkg.BinaryMetadata{ + Classifier: "perl-binary", + }, + }, + }, { name: "positive-redis-2.8.23", fixtureDir: "test-fixtures/classifiers/positive/redis-server-2.8.23", diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index 77e048d9b40..46bf31ca780 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -120,6 +120,15 @@ var defaultClassifiers = []classifier{ Package: "busybox", CPEs: singleCPE("cpe:2.3:a:busybox:busybox:*:*:*:*:*:*:*:*"), }, + { + Class: "perl-binary", + FileGlob: "**/perl", + EvidenceMatcher: fileContentsVersionMatcher( + `(?m)\/usr\/local\/lib\/perl\d\/(?P[0-9]+\.[0-9]+\.[0-9]+)`), + Package: "perl", + PURL: mustPURL("pkg:generic/perl@version"), + CPEs: singleCPE("cpe:2.3:a:perl:perl:*:*:*:*:*:*:*:*"), + }, { Class: "php-cli-binary", FileGlob: "**/php*", diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.12.5/perl b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.12.5/perl new file mode 100644 index 00000000000..44075881a61 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.12.5/perl differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.20.0/perl b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.20.0/perl new file mode 100644 index 00000000000..9f71e480dbc Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.20.0/perl differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.37.8/perl b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.37.8/perl new file mode 100644 index 00000000000..ed86dbac148 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/perl-5.37.8/perl differ