diff --git a/syft/pkg/cataloger/java/archive_parser.go b/syft/pkg/cataloger/java/archive_parser.go index 5c2a22087..477168afc 100644 --- a/syft/pkg/cataloger/java/archive_parser.go +++ b/syft/pkg/cataloger/java/archive_parser.go @@ -263,7 +263,7 @@ func (j *archiveParser) discoverMainPackage(ctx context.Context) (*pkg.Package, } var pkgPomProject *pkg.JavaPomProject if parsedPom != nil { - pkgPomProject = newPomProject(ctx, nil, parsedPom.path, parsedPom.project) + pkgPomProject = newPomProject(ctx, j.maven, parsedPom.path, parsedPom.project) } return &pkg.Package{ diff --git a/syft/pkg/cataloger/java/archive_parser_test.go b/syft/pkg/cataloger/java/archive_parser_test.go index 9bbc4c39c..71568c18c 100644 --- a/syft/pkg/cataloger/java/archive_parser_test.go +++ b/syft/pkg/cataloger/java/archive_parser_test.go @@ -1632,3 +1632,26 @@ func Test_corruptJarArchive(t *testing.T) { WithError(). TestParser(t, ap.parseJavaArchive) } + +func Test_jarPomPropertyResolutionDoesNotPanic(t *testing.T) { + jarName := generateJavaMetadataJarFixture(t, "commons-lang3-3.12.0", "jar") + fixture, err := os.Open(jarName) + require.NoError(t, err) + + ctx := context.TODO() + // setup parser + ap, cleanupFn, err := newJavaArchiveParser( + ctx, + file.LocationReadCloser{ + Location: file.NewLocation(fixture.Name()), + ReadCloser: fixture, + }, false, ArchiveCatalogerConfig{ + UseMavenLocalRepository: true, + MavenLocalRepositoryDir: "internal/maven/test-fixtures/maven-repo", + }) + defer cleanupFn() + require.NoError(t, err) + + _, _, err = ap.parse(ctx, nil) + require.NoError(t, err) +} diff --git a/syft/pkg/cataloger/java/test-fixtures/jar-metadata/Makefile b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/Makefile index a7781c168..5cdb05b1e 100644 --- a/syft/pkg/cataloger/java/test-fixtures/jar-metadata/Makefile +++ b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/Makefile @@ -14,7 +14,7 @@ SPRING_INSTRUMENTATION = spring-instrumentation-4.3.0-1.0 MULTIPLE_MATCHING = multiple-matching-2.11.5 ORG_MULTIPLE_THENAME = org.multiple-thename MICRONAUT_AOP = micronaut-aop-4.9.11 - +COMMONS_LANG3 = commons-lang3-3.12.0 .DEFAULT_GOAL := fixtures @@ -24,7 +24,7 @@ fixtures: $(CACHE_DIR) # requirement 2: 'fingerprint' goal to determine if the fixture input that indicates any existing cache should be busted fingerprint: $(FINGERPRINT_FILE) -$(CACHE_DIR): $(CACHE_DIR)/$(JACKSON_CORE).jar $(CACHE_DIR)/$(SBT_JACKSON_CORE).jar $(CACHE_DIR)/$(OPENSAML_CORE).jar $(CACHE_DIR)/$(API_ALL_SOURCES).jar $(CACHE_DIR)/$(SPRING_INSTRUMENTATION).jar $(CACHE_DIR)/$(MULTIPLE_MATCHING).jar $(CACHE_DIR)/$(MICRONAUT_AOP).jar +$(CACHE_DIR): $(CACHE_DIR)/$(JACKSON_CORE).jar $(CACHE_DIR)/$(SBT_JACKSON_CORE).jar $(CACHE_DIR)/$(OPENSAML_CORE).jar $(CACHE_DIR)/$(API_ALL_SOURCES).jar $(CACHE_DIR)/$(SPRING_INSTRUMENTATION).jar $(CACHE_DIR)/$(MULTIPLE_MATCHING).jar $(CACHE_DIR)/$(MICRONAUT_AOP).jar $(CACHE_DIR)/$(COMMONS_LANG3).jar $(CACHE_DIR)/$(JACKSON_CORE).jar: mkdir -p $(CACHE_DIR) @@ -58,6 +58,10 @@ $(CACHE_DIR)/$(MICRONAUT_AOP).jar: mkdir -p $(CACHE_DIR) cd $(MICRONAUT_AOP) && zip -r $(CACHE_PATH)/$(MICRONAUT_AOP).jar . +$(CACHE_DIR)/$(COMMONS_LANG3).jar: + mkdir -p $(CACHE_DIR) + cd $(COMMONS_LANG3) && zip -r $(CACHE_PATH)/$(COMMONS_LANG3).jar . + # Jenkins plugins typically do not have the version included in the archive name, # so it is important to not include it in the generated test fixture $(CACHE_DIR)/gradle.hpi: diff --git a/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/MANIFEST.MF b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/MANIFEST.MF new file mode 100644 index 000000000..9d885be53 --- /dev/null +++ b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/MANIFEST.MF @@ -0,0 +1 @@ +Manifest-Version: 1.0 diff --git a/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/maven/org.apache.commons-lang3/pom.xml b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/maven/org.apache.commons-lang3/pom.xml new file mode 100644 index 000000000..e7c18c753 --- /dev/null +++ b/syft/pkg/cataloger/java/test-fixtures/jar-metadata/commons-lang3-3.12.0/META-INF/maven/org.apache.commons-lang3/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + org.apache.commons + commons-parent + 54 + + org.apache.commons + commons-lang3 + ${commons.release.version} + pom + JUnit 5 (Bill of Materials) + + + Eclipse Public License v2.0 + https://www.eclipse.org/legal/epl-v20.html + + + + scm:git:git://github.com/junit-team/junit5.git + scm:git:git://github.com/junit-team/junit5.git + https://github.com/junit-team/junit5 + + + + org.junit.vintage + junit-vintage-engine + ${commons.release.version} + + +