Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package syft for openSUSE:Factory checked in at 2022-11-22 16:10:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/syft (Old) and /work/SRC/openSUSE:Factory/.syft.new.1597 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "syft" Tue Nov 22 16:10:02 2022 rev:14 rq:1037138 version:0.62.1 Changes: -------- --- /work/SRC/openSUSE:Factory/syft/syft.changes 2022-11-19 18:09:15.266415969 +0100 +++ /work/SRC/openSUSE:Factory/.syft.new.1597/syft.changes 2022-11-22 16:10:11.182031029 +0100 @@ -1,0 +2,8 @@ +Mon Nov 21 15:12:29 UTC 2022 - ka...@b1-systems.de + +- Update to version 0.62.1: + * fix: sort relationships in SPDX output (#1350) + * chore: add debug logging for decode errors (#1352) + * feat(npm): handle aliases in package-lock.json (#1349) + +------------------------------------------------------------------- Old: ---- syft-0.62.0.tar.gz New: ---- syft-0.62.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ syft.spec ++++++ --- /var/tmp/diff_new_pack.hwVrvd/_old 2022-11-22 16:10:12.826039370 +0100 +++ /var/tmp/diff_new_pack.hwVrvd/_new 2022-11-22 16:10:12.834039411 +0100 @@ -19,7 +19,7 @@ %define __arch_install_post export NO_BRP_STRIP_DEBUG=true Name: syft -Version: 0.62.0 +Version: 0.62.1 Release: 0 Summary: CLI tool and library for generating a Software Bill of Materials License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.hwVrvd/_old 2022-11-22 16:10:12.890039695 +0100 +++ /var/tmp/diff_new_pack.hwVrvd/_new 2022-11-22 16:10:12.898039735 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/anchore/syft</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.62.0</param> + <param name="revision">v0.62.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> @@ -16,7 +16,7 @@ <param name="compression">gz</param> </service> <service name="go_modules" mode="disabled"> - <param name="archive">syft-0.62.0.tar.gz</param> + <param name="archive">syft-0.62.1.tar.gz</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.hwVrvd/_old 2022-11-22 16:10:12.942039958 +0100 +++ /var/tmp/diff_new_pack.hwVrvd/_new 2022-11-22 16:10:12.950039999 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/anchore/syft</param> - <param name="changesrevision">da4b2df57640e03f273a2e7e9b04eca40555e139</param></service></servicedata> + <param name="changesrevision">098e61dcc81d7a6d666bc62a2166c9b8f32c61bc</param></service></servicedata> (No newline at EOF) ++++++ syft-0.62.0.tar.gz -> syft-0.62.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/common/spdxhelpers/to_format_model.go new/syft-0.62.1/syft/formats/common/spdxhelpers/to_format_model.go --- old/syft-0.62.0/syft/formats/common/spdxhelpers/to_format_model.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/common/spdxhelpers/to_format_model.go 2022-11-21 15:26:24.000000000 +0100 @@ -105,7 +105,7 @@ }, Packages: toPackages(s.Artifacts.PackageCatalog), Files: toFiles(s), - Relationships: toRelationships(s.Relationships), + Relationships: toRelationships(s.RelationshipsSorted()), } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/common/testutils/utils.go new/syft-0.62.1/syft/formats/common/testutils/utils.go --- old/syft-0.62.0/syft/formats/common/testutils/utils.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/common/testutils/utils.go 2022-11-21 15:26:24.000000000 +0100 @@ -2,8 +2,10 @@ import ( "bytes" + "math/rand" "strings" "testing" + "time" "github.com/sergi/go-diff/diffmatchpatch" "github.com/stretchr/testify/assert" @@ -12,6 +14,7 @@ "github.com/anchore/stereoscope/pkg/filetree" "github.com/anchore/stereoscope/pkg/image" "github.com/anchore/stereoscope/pkg/imagetest" + "github.com/anchore/syft/syft/artifact" "github.com/anchore/syft/syft/linux" "github.com/anchore/syft/syft/pkg" "github.com/anchore/syft/syft/sbom" @@ -276,3 +279,25 @@ return catalog } + +//nolint:gosec +func AddSampleFileRelationships(s *sbom.SBOM) { + catalog := s.Artifacts.PackageCatalog.Sorted() + s.Artifacts.FileMetadata = map[source.Coordinates]source.FileMetadata{} + + files := []string{"/f1", "/f2", "/d1/f3", "/d2/f4", "/z1/f5", "/a1/f6"} + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + rnd.Shuffle(len(files), func(i, j int) { files[i], files[j] = files[j], files[i] }) + + for _, f := range files { + meta := source.FileMetadata{} + coords := source.Coordinates{RealPath: f} + s.Artifacts.FileMetadata[coords] = meta + + s.Relationships = append(s.Relationships, artifact.Relationship{ + From: catalog[0], + To: coords, + Type: artifact.ContainsRelationship, + }) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/formats.go new/syft-0.62.1/syft/formats/formats.go --- old/syft-0.62.0/syft/formats/formats.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/formats.go 2022-11-21 15:26:24.000000000 +0100 @@ -2,10 +2,12 @@ import ( "bytes" + "errors" "fmt" "io" "strings" + "github.com/anchore/syft/internal/log" "github.com/anchore/syft/syft/formats/cyclonedxjson" "github.com/anchore/syft/syft/formats/cyclonedxxml" "github.com/anchore/syft/syft/formats/github" @@ -35,6 +37,9 @@ func Identify(by []byte) sbom.Format { for _, f := range Formats() { if err := f.Validate(bytes.NewReader(by)); err != nil { + if !errors.Is(err, sbom.ErrValidationNotSupported) { + log.Debugf("format %s returned err: %+v", f.ID(), err) + } continue } return f diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxjson/encoder_test.go new/syft-0.62.1/syft/formats/spdxjson/encoder_test.go --- old/syft-0.62.0/syft/formats/spdxjson/encoder_test.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxjson/encoder_test.go 2022-11-21 15:26:24.000000000 +0100 @@ -5,10 +5,7 @@ "regexp" "testing" - "github.com/anchore/syft/syft/artifact" "github.com/anchore/syft/syft/formats/common/testutils" - "github.com/anchore/syft/syft/sbom" - "github.com/anchore/syft/syft/source" ) var updateSpdxJson = flag.Bool("update-spdx-json", false, "update the *.golden files for spdx-json encoders") @@ -36,7 +33,7 @@ func TestSPDXRelationshipOrder(t *testing.T) { testImage := "image-simple" s := testutils.ImageInput(t, testImage, testutils.FromSnapshot()) - addRelationships(&s) + testutils.AddSampleFileRelationships(&s) testutils.AssertEncoderAgainstGoldenImageSnapshot(t, Format(), s, @@ -46,23 +43,6 @@ ) } -func addRelationships(s *sbom.SBOM) { - catalog := s.Artifacts.PackageCatalog.Sorted() - s.Artifacts.FileMetadata = map[source.Coordinates]source.FileMetadata{} - - for _, f := range []string{"/f1", "/f2", "/d1/f3", "/d2/f4", "/z1/f5", "/a1/f6"} { - meta := source.FileMetadata{} - coords := source.Coordinates{RealPath: f} - s.Artifacts.FileMetadata[coords] = meta - - s.Relationships = append(s.Relationships, artifact.Relationship{ - From: catalog[0], - To: coords, - Type: artifact.ContainsRelationship, - }) - } -} - func spdxJsonRedactor(s []byte) []byte { // each SBOM reports the time it was generated, which is not useful during snapshot testing s = regexp.MustCompile(`"created": .*`).ReplaceAll(s, []byte("redacted")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONDirectoryEncoder.golden new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONDirectoryEncoder.golden --- old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONDirectoryEncoder.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONDirectoryEncoder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -3,14 +3,14 @@ "dataLicense": "CC0-1.0", "SPDXID": "SPDXRef-DOCUMENT", "name": "/some/path", - "documentNamespace": "https://anchore.com/syft/dir/some/path-0f9b165e-1819-43cb-bd58-f61c1c23d6cf", + "documentNamespace": "https://anchore.com/syft/dir/some/path-4bf54cdd-0a0f-4560-bf4f-39cac2ef7a5b", "creationInfo": { "licenseListVersion": "3.18", "creators": [ "Organization: Anchore, Inc", "Tool: syft-v0.42.0-bogus" ], - "created": "2022-11-11T19:24:55Z", + "created": "2022-11-19T13:46:57Z", "comment": "" }, "packages": [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONImageEncoder.golden new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONImageEncoder.golden --- old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONImageEncoder.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXJSONImageEncoder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -3,14 +3,14 @@ "dataLicense": "CC0-1.0", "SPDXID": "SPDXRef-DOCUMENT", "name": "user-image-input", - "documentNamespace": "https://anchore.com/syft/image/user-image-input-5841d063-c3ef-406b-91b4-8a702ef45ce9", + "documentNamespace": "https://anchore.com/syft/image/user-image-input-102ca7dc-3d1e-46d2-b130-28968831ebcc", "creationInfo": { "licenseListVersion": "3.18", "creators": [ "Organization: Anchore, Inc", "Tool: syft-v0.42.0-bogus" ], - "created": "2022-11-11T19:24:55Z", + "created": "2022-11-19T13:46:57Z", "comment": "" }, "packages": [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden --- old/syft-0.62.0/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxjson/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -3,14 +3,14 @@ "dataLicense": "CC0-1.0", "SPDXID": "SPDXRef-DOCUMENT", "name": "user-image-input", - "documentNamespace": "https://anchore.com/syft/image/user-image-input-8755f340-f205-4bf2-a909-94c623670734", + "documentNamespace": "https://anchore.com/syft/image/user-image-input-55ad4afc-ecdc-46a4-8bc3-36b3e72da5d1", "creationInfo": { "licenseListVersion": "3.18", "creators": [ "Organization: Anchore, Inc", "Tool: syft-v0.42.0-bogus" ], - "created": "2022-11-11T19:24:55Z", + "created": "2022-11-19T13:46:57Z", "comment": "" }, "packages": [ @@ -133,12 +133,12 @@ }, { "spdxElementId": "SPDXRef-Package-python-package-1-66ba429119b8bec6", - "relatedSpdxElement": "SPDXRef-f9e49132a4b96ccd", + "relatedSpdxElement": "SPDXRef-839d99ee67d9d174", "relationshipType": "CONTAINS" }, { "spdxElementId": "SPDXRef-Package-python-package-1-66ba429119b8bec6", - "relatedSpdxElement": "SPDXRef-c6f5b29dca12661f", + "relatedSpdxElement": "SPDXRef-9c2f7510199b17f6", "relationshipType": "CONTAINS" }, { @@ -148,12 +148,12 @@ }, { "spdxElementId": "SPDXRef-Package-python-package-1-66ba429119b8bec6", - "relatedSpdxElement": "SPDXRef-839d99ee67d9d174", + "relatedSpdxElement": "SPDXRef-c6f5b29dca12661f", "relationshipType": "CONTAINS" }, { "spdxElementId": "SPDXRef-Package-python-package-1-66ba429119b8bec6", - "relatedSpdxElement": "SPDXRef-9c2f7510199b17f6", + "relatedSpdxElement": "SPDXRef-f9e49132a4b96ccd", "relationshipType": "CONTAINS" } ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/decoder.go new/syft-0.62.1/syft/formats/spdxtagvalue/decoder.go --- old/syft-0.62.0/syft/formats/spdxtagvalue/decoder.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/decoder.go 2022-11-21 15:26:24.000000000 +0100 @@ -13,7 +13,7 @@ func decoder(reader io.Reader) (*sbom.SBOM, error) { doc, err := tvloader.Load2_3(reader) if err != nil { - return nil, fmt.Errorf("unable to decode spdx-json: %w", err) + return nil, fmt.Errorf("unable to decode spdx-tag-value: %w", err) } return spdxhelpers.ToSyftModel(doc) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/encoder_test.go new/syft-0.62.1/syft/formats/spdxtagvalue/encoder_test.go --- old/syft-0.62.0/syft/formats/spdxtagvalue/encoder_test.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/encoder_test.go 2022-11-21 15:26:24.000000000 +0100 @@ -67,6 +67,19 @@ ) } +func TestSPDXRelationshipOrder(t *testing.T) { + testImage := "image-simple" + s := testutils.ImageInput(t, testImage, testutils.FromSnapshot()) + testutils.AddSampleFileRelationships(&s) + testutils.AssertEncoderAgainstGoldenImageSnapshot(t, + Format(), + s, + testImage, + *updateSpdxTagValue, + spdxTagValueRedactor, + ) +} + func spdxTagValueRedactor(s []byte) []byte { // each SBOM reports the time it was generated, which is not useful during snapshot testing s = regexp.MustCompile(`Created: .*`).ReplaceAll(s, []byte("redacted")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXJSONSPDXIDs.golden new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXJSONSPDXIDs.golden --- old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXJSONSPDXIDs.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXJSONSPDXIDs.golden 2022-11-21 15:26:24.000000000 +0100 @@ -2,11 +2,11 @@ DataLicense: CC0-1.0 SPDXID: SPDXRef-DOCUMENT DocumentName: foobar/baz -DocumentNamespace: https://anchore.com/syft/dir/foobar/baz-3d730196-4510-4ee4-9743-9322dd27cee7 +DocumentNamespace: https://anchore.com/syft/dir/foobar/baz-62bc0aae-2b37-4c86-ab79-63c6fc4198ed LicenseListVersion: 3.18 Creator: Organization: Anchore, Inc Creator: Tool: syft-v0.42.0-bogus -Created: 2022-11-18T14:21:45Z +Created: 2022-11-19T13:48:30Z ##### Package: @at-sign diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden --- old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden 1970-01-01 01:00:00.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXRelationshipOrder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -0,0 +1,79 @@ +SPDXVersion: SPDX-2.3 +DataLicense: CC0-1.0 +SPDXID: SPDXRef-DOCUMENT +DocumentName: user-image-input +DocumentNamespace: https://anchore.com/syft/image/user-image-input-cc20e416-9c74-401c-b4aa-245556bada5e +LicenseListVersion: 3.18 +Creator: Organization: Anchore, Inc +Creator: Tool: syft-v0.42.0-bogus +Created: 2022-11-19T13:48:30Z + +##### Unpackaged files + +FileName: /f1 +SPDXID: SPDXRef-5265a4dde3edbf7c +FileType: OTHER +LicenseConcluded: NOASSERTION + +FileName: /z1/f5 +SPDXID: SPDXRef-839d99ee67d9d174 +FileType: OTHER +LicenseConcluded: NOASSERTION + +FileName: /a1/f6 +SPDXID: SPDXRef-9c2f7510199b17f6 +FileType: OTHER +LicenseConcluded: NOASSERTION + +FileName: /d2/f4 +SPDXID: SPDXRef-c641caa71518099f +FileType: OTHER +LicenseConcluded: NOASSERTION + +FileName: /d1/f3 +SPDXID: SPDXRef-c6f5b29dca12661f +FileType: OTHER +LicenseConcluded: NOASSERTION + +FileName: /f2 +SPDXID: SPDXRef-f9e49132a4b96ccd +FileType: OTHER +LicenseConcluded: NOASSERTION + +##### Package: package-2 + +PackageName: package-2 +SPDXID: SPDXRef-Package-deb-package-2-958443e2d9304af4 +PackageVersion: 2.0.1 +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageSourceInfo: acquired package info from DPKG DB: /somefile-2.txt +PackageLicenseConcluded: NONE +PackageLicenseDeclared: NONE +PackageCopyrightText: NOASSERTION +ExternalRef: SECURITY cpe23Type cpe:2.3:*:some:package:2:*:*:*:*:*:*:* +ExternalRef: PACKAGE-MANAGER purl pkg:deb/debian/package-2@2.0.1 + +##### Package: package-1 + +PackageName: package-1 +SPDXID: SPDXRef-Package-python-package-1-66ba429119b8bec6 +PackageVersion: 1.0.1 +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageSourceInfo: acquired package info from installed python package manifest file: /somefile-1.txt +PackageLicenseConcluded: MIT +PackageLicenseDeclared: MIT +PackageCopyrightText: NOASSERTION +ExternalRef: SECURITY cpe23Type cpe:2.3:*:some:package:1:*:*:*:*:*:*:* +ExternalRef: PACKAGE-MANAGER purl a-purl-1 + +##### Relationships + +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-5265a4dde3edbf7c +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-839d99ee67d9d174 +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-9c2f7510199b17f6 +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-c641caa71518099f +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-c6f5b29dca12661f +Relationship: SPDXRef-Package-python-package-1-66ba429119b8bec6 CONTAINS SPDXRef-f9e49132a4b96ccd + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueDirectoryEncoder.golden new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueDirectoryEncoder.golden --- old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueDirectoryEncoder.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueDirectoryEncoder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -2,11 +2,11 @@ DataLicense: CC0-1.0 SPDXID: SPDXRef-DOCUMENT DocumentName: /some/path -DocumentNamespace: https://anchore.com/syft/dir/some/path-b6078c95-5b97-462d-acb3-9e74bc9ddb43 +DocumentNamespace: https://anchore.com/syft/dir/some/path-7a4b2140-6669-4a28-80dd-5c8e795c5da0 LicenseListVersion: 3.18 Creator: Organization: Anchore, Inc Creator: Tool: syft-v0.42.0-bogus -Created: 2022-11-18T14:21:44Z +Created: 2022-11-19T13:48:30Z ##### Package: package-2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueImageEncoder.golden new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueImageEncoder.golden --- old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueImageEncoder.golden 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/TestSPDXTagValueImageEncoder.golden 2022-11-21 15:26:24.000000000 +0100 @@ -2,11 +2,11 @@ DataLicense: CC0-1.0 SPDXID: SPDXRef-DOCUMENT DocumentName: user-image-input -DocumentNamespace: https://anchore.com/syft/image/user-image-input-aa272d1e-8bb4-411f-a554-4c9a16ea66fb +DocumentNamespace: https://anchore.com/syft/image/user-image-input-baff7ada-85cb-403e-90d7-05b0c6d79490 LicenseListVersion: 3.18 Creator: Organization: Anchore, Inc Creator: Tool: syft-v0.42.0-bogus -Created: 2022-11-18T14:21:45Z +Created: 2022-11-19T13:48:30Z ##### Package: package-2 Binary files old/syft-0.62.0/syft/formats/spdxtagvalue/test-fixtures/snapshot/stereoscope-fixture-image-simple.golden and new/syft-0.62.1/syft/formats/spdxtagvalue/test-fixtures/snapshot/stereoscope-fixture-image-simple.golden differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/pkg/cataloger/javascript/package.go new/syft-0.62.1/syft/pkg/cataloger/javascript/package.go --- old/syft-0.62.0/syft/pkg/cataloger/javascript/package.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/pkg/cataloger/javascript/package.go 2022-11-21 15:26:24.000000000 +0100 @@ -44,14 +44,29 @@ } func newPackageLockV1Package(resolver source.FileResolver, location source.Location, name string, u lockDependency) pkg.Package { + version := u.Version + + const aliasPrefixPackageLockV1 = "npm:" + + // Handles type aliases https://github.com/npm/rfcs/blob/main/implemented/0001-package-aliases.md + if strings.HasPrefix(version, aliasPrefixPackageLockV1) { + // this is an alias. + // `"version": "npm:canonical-name@X.Y.Z"` + canonicalPackageAndVersion := version[len(aliasPrefixPackageLockV1):] + versionSeparator := strings.LastIndex(canonicalPackageAndVersion, "@") + + name = canonicalPackageAndVersion[:versionSeparator] + version = canonicalPackageAndVersion[versionSeparator+1:] + } + return finalizeLockPkg( resolver, location, pkg.Package{ Name: name, - Version: u.Version, + Version: version, Locations: source.NewLocationSet(location), - PURL: packageURL(name, u.Version), + PURL: packageURL(name, version), Language: pkg.JavaScript, Type: pkg.NpmPkg, }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/pkg/cataloger/javascript/parse_package_lock.go new/syft-0.62.1/syft/pkg/cataloger/javascript/parse_package_lock.go --- old/syft-0.62.0/syft/pkg/cataloger/javascript/parse_package_lock.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/pkg/cataloger/javascript/parse_package_lock.go 2022-11-21 15:26:24.000000000 +0100 @@ -75,6 +75,11 @@ } } + // handles alias names + if pkgMeta.Name != "" { + name = pkgMeta.Name + } + pkgs = append(pkgs, newPackageLockV2Package(resolver, reader.Location, getNameFromPath(name), pkgMeta)) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/pkg/cataloger/javascript/parse_package_lock_test.go new/syft-0.62.1/syft/pkg/cataloger/javascript/parse_package_lock_test.go --- old/syft-0.62.0/syft/pkg/cataloger/javascript/parse_package_lock_test.go 2022-11-18 19:42:55.000000000 +0100 +++ new/syft-0.62.1/syft/pkg/cataloger/javascript/parse_package_lock_test.go 2022-11-21 15:26:24.000000000 +0100 @@ -193,3 +193,57 @@ } pkgtest.TestFileParser(t, fixture, parsePackageLock, expectedPkgs, expectedRelationships) } + +func TestParsePackageLockAlias(t *testing.T) { + var expectedRelationships []artifact.Relationship + commonPkgs := []pkg.Package{ + { + Name: "case", + Version: "1.6.2", + PURL: "pkg:npm/case@1.6.2", + Language: pkg.JavaScript, + Type: pkg.NpmPkg, + }, + { + Name: "case", + Version: "1.6.3", + PURL: "pkg:npm/case@1.6.3", + Language: pkg.JavaScript, + Type: pkg.NpmPkg, + }, + { + Name: "@bundled-es-modules/chai", + Version: "4.2.2", + PURL: "pkg:npm/%40bundled-es-modules/chai@4.2.2", + Language: pkg.JavaScript, + Type: pkg.NpmPkg, + }, + } + + v2Pkg := pkg.Package{ + Name: "alias-check", + Version: "1.0.0", + PURL: "pkg:npm/alias-check@1.0.0", + Language: pkg.JavaScript, + Type: pkg.NpmPkg, + Licenses: []string{"ISC"}, + } + + packageLockV1 := "test-fixtures/pkg-lock/alias-package-lock-1.json" + packageLockV2 := "test-fixtures/pkg-lock/alias-package-lock-2.json" + packageLocks := []string{packageLockV1, packageLockV2} + + for _, packageLock := range packageLocks { + expected := make([]pkg.Package, len(commonPkgs)) + copy(expected, commonPkgs) + + if packageLock == packageLockV2 { + expected = append(expected, v2Pkg) + } + + for i := range expected { + expected[i].Locations.Add(source.NewLocation(packageLock)) + } + pkgtest.TestFileParser(t, packageLock, parsePackageLock, expected, expectedRelationships) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-1.json new/syft-0.62.1/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-1.json --- old/syft-0.62.0/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-1.json 1970-01-01 01:00:00.000000000 +0100 +++ new/syft-0.62.1/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-1.json 2022-11-21 15:26:24.000000000 +0100 @@ -0,0 +1,23 @@ +{ + "name": "alias-check", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "case": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.2.tgz", + "integrity": "sha512-ll380ZRoraT7mUK2G92UbH+FJVD5AwdVIAYk9xhV1tauh0carDgYByUD1HhjCWsWgxrfQvCeHvtfj7IYR6TKeg==" + }, + "case-alias": { + "version": "npm:case@1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" + }, + "chai": { + "version": "npm:@bundled-es-modules/chai@4.2.2", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/chai/-/chai-4.2.2.tgz", + "integrity": "sha512-iGmVYw2/zJCoqyKTtWEYCtFmMyi8WmACQKtky0lpNyEKWX0YIOpKWGD7saMXL+tPpllss0otilxV0SLwyi3Ytg==" + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syft-0.62.0/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-2.json new/syft-0.62.1/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-2.json --- old/syft-0.62.0/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-2.json 1970-01-01 01:00:00.000000000 +0100 +++ new/syft-0.62.1/syft/pkg/cataloger/javascript/test-fixtures/pkg-lock/alias-package-lock-2.json 2022-11-21 15:26:24.000000000 +0100 @@ -0,0 +1,58 @@ +{ + "name": "alias-check", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "alias-check", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "case": "1.6.2", + "case-alias": "npm:case@^1.6.3", + "chai": "npm:@bundled-es-modules/chai@^4.2.2" + } + }, + "node_modules/case": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.2.tgz", + "integrity": "sha512-ll380ZRoraT7mUK2G92UbH+FJVD5AwdVIAYk9xhV1tauh0carDgYByUD1HhjCWsWgxrfQvCeHvtfj7IYR6TKeg==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/case-alias": { + "name": "case", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chai": { + "name": "@bundled-es-modules/chai", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/chai/-/chai-4.2.2.tgz", + "integrity": "sha512-iGmVYw2/zJCoqyKTtWEYCtFmMyi8WmACQKtky0lpNyEKWX0YIOpKWGD7saMXL+tPpllss0otilxV0SLwyi3Ytg==" + } + }, + "dependencies": { + "case": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.2.tgz", + "integrity": "sha512-ll380ZRoraT7mUK2G92UbH+FJVD5AwdVIAYk9xhV1tauh0carDgYByUD1HhjCWsWgxrfQvCeHvtfj7IYR6TKeg==" + }, + "case-alias": { + "version": "npm:case@1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" + }, + "chai": { + "version": "npm:@bundled-es-modules/chai@4.2.2", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/chai/-/chai-4.2.2.tgz", + "integrity": "sha512-iGmVYw2/zJCoqyKTtWEYCtFmMyi8WmACQKtky0lpNyEKWX0YIOpKWGD7saMXL+tPpllss0otilxV0SLwyi3Ytg==" + } + } +} ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/syft/vendor.tar.gz /work/SRC/openSUSE:Factory/.syft.new.1597/vendor.tar.gz differ: char 5, line 1