From 16ebcb2455fed93f97da64d959ddf070a1b0e7a1 Mon Sep 17 00:00:00 2001 From: Shane Dell <32347414+Shanedell@users.noreply.github.com> Date: Tue, 11 Apr 2023 09:41:49 -0400 Subject: [PATCH] Add support for nar files. (#1727) - Update README.md to show that nar is now supported. - Created a java-archives/example.nar so that the tests wouldn't break. - Add nar glob and as an option for pkgType. Closes #1701 Signed-off-by: Shane Dell --- README.md | 2 +- syft/pkg/cataloger/java/archive_filename.go | 2 +- syft/pkg/cataloger/java/archive_filename_test.go | 7 +++++++ syft/pkg/cataloger/java/archive_parser.go | 1 + syft/pkg/cataloger/java/cataloger_test.go | 1 + .../test-fixtures/glob-paths/java-archives/example.nar | 1 + 6 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.nar diff --git a/README.md b/README.md index 5b6aaf0a4..85fba926a 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ For commercial support options with Syft or Grype, please [contact Anchore](http - Erlang (rebar3) - Go (go.mod, Go binaries) - Haskell (cabal, stack) -- Java (jar, ear, war, par, sar, native-image) +- Java (jar, ear, war, par, sar, nar, native-image) - JavaScript (npm, yarn) - Jenkins Plugins (jpi, hpi) - Nix (outputs in /nix/store) diff --git a/syft/pkg/cataloger/java/archive_filename.go b/syft/pkg/cataloger/java/archive_filename.go index 519cd7dd0..ba8f3b383 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": + case "jar", "war", "ear", "lpkg", "par", "sar", "nar": 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 f1c34aaa7..110d94211 100644 --- a/syft/pkg/cataloger/java/archive_filename_test.go +++ b/syft/pkg/cataloger/java/archive_filename_test.go @@ -79,6 +79,13 @@ func TestExtractInfoFromJavaArchiveFilename(t *testing.T) { name: "pkg-extra-field-maven", ty: pkg.JavaPkg, }, + { + filename: "pkg-extra-field-maven-4.3.2-rc1.nar", + version: "4.3.2-rc1", + extension: "nar", + name: "pkg-extra-field-maven", + ty: pkg.JavaPkg, + }, { filename: "/some/path/pkg-extra-field-maven-4.3.2-rc1.jpi", version: "4.3.2-rc1", diff --git a/syft/pkg/cataloger/java/archive_parser.go b/syft/pkg/cataloger/java/archive_parser.go index 3150351c8..a0e8b7465 100644 --- a/syft/pkg/cataloger/java/archive_parser.go +++ b/syft/pkg/cataloger/java/archive_parser.go @@ -24,6 +24,7 @@ var archiveFormatGlobs = []string{ "**/*.ear", "**/*.par", "**/*.sar", + "**/*.nar", "**/*.jpi", "**/*.hpi", "**/*.lpkg", // Zip-compressed package used to deploy applications diff --git a/syft/pkg/cataloger/java/cataloger_test.go b/syft/pkg/cataloger/java/cataloger_test.go index 6ec834aff..ab09dc2fe 100644 --- a/syft/pkg/cataloger/java/cataloger_test.go +++ b/syft/pkg/cataloger/java/cataloger_test.go @@ -21,6 +21,7 @@ func Test_ArchiveCataloger_Globs(t *testing.T) { "java-archives/example.ear", "java-archives/example.par", "java-archives/example.sar", + "java-archives/example.nar", "java-archives/example.jpi", "java-archives/example.hpi", "java-archives/example.lpkg", diff --git a/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.nar b/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.nar new file mode 100644 index 000000000..8944cbcc0 --- /dev/null +++ b/syft/pkg/cataloger/java/test-fixtures/glob-paths/java-archives/example.nar @@ -0,0 +1 @@ +example archive