diff --git a/README.md b/README.md index 12577f10f..26d55bc1f 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ Note that flags using the @ can be used for earlier versions of each sp - Go (go.mod, Go binaries) - GitHub (workflows, actions) - Haskell (cabal, stack) -- Java (jar, ear, war, par, sar, nar, native-image) +- Java (jar, ear, war, par, sar, nar, rar, native-image) - JavaScript (npm, yarn) - Jenkins Plugins (jpi, hpi) - Linux kernel archives (vmlinz) diff --git a/syft/pkg/cataloger/java/archive_filename.go b/syft/pkg/cataloger/java/archive_filename.go index b753def1d..1e3efb50d 100644 --- a/syft/pkg/cataloger/java/archive_filename.go +++ b/syft/pkg/cataloger/java/archive_filename.go @@ -108,7 +108,7 @@ func (a archiveFilename) extension() string { func (a archiveFilename) pkgType() pkg.Type { switch strings.ToLower(a.extension()) { - case "jar", "war", "ear", "lpkg", "par", "sar", "nar", "kar": + case "jar", "war", "ear", "lpkg", "par", "sar", "nar", "kar", "rar": return pkg.JavaPkg case "jpi", "hpi": return pkg.JenkinsPluginPkg diff --git a/syft/pkg/cataloger/java/archive_filename_test.go b/syft/pkg/cataloger/java/archive_filename_test.go index 985604912..6c73426eb 100644 --- a/syft/pkg/cataloger/java/archive_filename_test.go +++ b/syft/pkg/cataloger/java/archive_filename_test.go @@ -187,6 +187,13 @@ func TestExtractInfoFromJavaArchiveFilename(t *testing.T) { name: "gradle-build-cache", ty: pkg.JavaPkg, }, + { + filename: "pkg-extra-field-maven-4.3.2-rc1.rar", + version: "4.3.2-rc1", + extension: "rar", + name: "pkg-extra-field-maven", + ty: pkg.JavaPkg, + }, } for _, test := range tests { diff --git a/syft/pkg/cataloger/java/archive_parser.go b/syft/pkg/cataloger/java/archive_parser.go index 477168afc..5e3d188a1 100644 --- a/syft/pkg/cataloger/java/archive_parser.go +++ b/syft/pkg/cataloger/java/archive_parser.go @@ -45,6 +45,7 @@ var archiveFormatGlobs = []string{ // LifeRay makes it pretty cumbersome to make a such plugins; their docs are // out of date, and they charge for their IDE. If you find an example // project that we can build in CI feel free to include it + "**/*.rar", // Java Resource Adapter Archive } // javaArchiveHashes are all the current hash algorithms used to calculate archive digests diff --git a/syft/pkg/cataloger/java/cataloger_test.go b/syft/pkg/cataloger/java/cataloger_test.go index 7bed8cfcb..b5acbe4a9 100644 --- a/syft/pkg/cataloger/java/cataloger_test.go +++ b/syft/pkg/cataloger/java/cataloger_test.go @@ -30,6 +30,7 @@ func Test_ArchiveCataloger_Globs(t *testing.T) { "java-archives/example.jpi", "java-archives/example.hpi", "java-archives/example.lpkg", + "java-archives/example.rar", "archives/example.zip", "archives/example.tar", "archives/example.tar.gz", diff --git a/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.rar b/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.rar new file mode 100644 index 000000000..8944cbcc0 --- /dev/null +++ b/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.rar @@ -0,0 +1 @@ +example archive