mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
fix: "or-later" suffix updated to consider deprecated "+" operator (#1907)
* fix: or-later suffix has been updated to consider deprecated + If a given license has the suffix "or-later" it previously could have been considered or represented with a "+". Example "GFDL-1.0-or-later" could have been represented as "GFDL-1.0+". This PR allows the license list generation to consider "or-later" as == to "+" when generating permutations for upgrading deprecated licenses. --------- Signed-off-by: Christopher Phillips <christopher.phillips@anchore.com>
This commit is contained in:
parent
4ab9f393fc
commit
72616db81f
@ -81,8 +81,11 @@ func Test_processSPDXLicense(t *testing.T) {
|
|||||||
"afl3.0.0": "AFL-3.0",
|
"afl3.0.0": "AFL-3.0",
|
||||||
"afmparse": "Afmparse",
|
"afmparse": "Afmparse",
|
||||||
"agpl1": "AGPL-1.0-only",
|
"agpl1": "AGPL-1.0-only",
|
||||||
|
"agpl1+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0": "AGPL-1.0-only",
|
"agpl1.0": "AGPL-1.0-only",
|
||||||
|
"agpl1.0+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0.0": "AGPL-1.0-only",
|
"agpl1.0.0": "AGPL-1.0-only",
|
||||||
|
"agpl1.0.0+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0.0only": "AGPL-1.0-only",
|
"agpl1.0.0only": "AGPL-1.0-only",
|
||||||
"agpl1.0.0orlater": "AGPL-1.0-or-later",
|
"agpl1.0.0orlater": "AGPL-1.0-or-later",
|
||||||
"agpl1.0only": "AGPL-1.0-only",
|
"agpl1.0only": "AGPL-1.0-only",
|
||||||
@ -90,8 +93,11 @@ func Test_processSPDXLicense(t *testing.T) {
|
|||||||
"agpl1only": "AGPL-1.0-only",
|
"agpl1only": "AGPL-1.0-only",
|
||||||
"agpl1orlater": "AGPL-1.0-or-later",
|
"agpl1orlater": "AGPL-1.0-or-later",
|
||||||
"agpl3": "AGPL-3.0-only",
|
"agpl3": "AGPL-3.0-only",
|
||||||
|
"agpl3+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0": "AGPL-3.0-only",
|
"agpl3.0": "AGPL-3.0-only",
|
||||||
|
"agpl3.0+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0.0": "AGPL-3.0-only",
|
"agpl3.0.0": "AGPL-3.0-only",
|
||||||
|
"agpl3.0.0+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0.0only": "AGPL-3.0-only",
|
"agpl3.0.0only": "AGPL-3.0-only",
|
||||||
"agpl3.0.0orlater": "AGPL-3.0-or-later",
|
"agpl3.0.0orlater": "AGPL-3.0-or-later",
|
||||||
"agpl3.0only": "AGPL-3.0-only",
|
"agpl3.0only": "AGPL-3.0-only",
|
||||||
@ -548,8 +554,17 @@ func Test_processSPDXLicense(t *testing.T) {
|
|||||||
"ftl": "FTL",
|
"ftl": "FTL",
|
||||||
"gd": "GD",
|
"gd": "GD",
|
||||||
"gfdl1": "GFDL-1.1-only",
|
"gfdl1": "GFDL-1.1-only",
|
||||||
|
"gfdl1+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1": "GFDL-1.1-only",
|
"gfdl1.1": "GFDL-1.1-only",
|
||||||
|
"gfdl1.1+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1.1+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1.1+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1.0": "GFDL-1.1-only",
|
"gfdl1.1.0": "GFDL-1.1-only",
|
||||||
|
"gfdl1.1.0+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1.1.0+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1.1.0+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1.0invariantsonly": "GFDL-1.1-invariants-only",
|
"gfdl1.1.0invariantsonly": "GFDL-1.1-invariants-only",
|
||||||
"gfdl1.1.0invariantsorlater": "GFDL-1.1-invariants-or-later",
|
"gfdl1.1.0invariantsorlater": "GFDL-1.1-invariants-or-later",
|
||||||
"gfdl1.1.0noinvariantsonly": "GFDL-1.1-no-invariants-only",
|
"gfdl1.1.0noinvariantsonly": "GFDL-1.1-no-invariants-only",
|
||||||
@ -563,7 +578,13 @@ func Test_processSPDXLicense(t *testing.T) {
|
|||||||
"gfdl1.1only": "GFDL-1.1-only",
|
"gfdl1.1only": "GFDL-1.1-only",
|
||||||
"gfdl1.1orlater": "GFDL-1.1-or-later",
|
"gfdl1.1orlater": "GFDL-1.1-or-later",
|
||||||
"gfdl1.2": "GFDL-1.2-only",
|
"gfdl1.2": "GFDL-1.2-only",
|
||||||
|
"gfdl1.2+": "GFDL-1.2-or-later",
|
||||||
|
"gfdl1.2+invariants": "GFDL-1.2-invariants-or-later",
|
||||||
|
"gfdl1.2+noinvariants": "GFDL-1.2-no-invariants-or-later",
|
||||||
"gfdl1.2.0": "GFDL-1.2-only",
|
"gfdl1.2.0": "GFDL-1.2-only",
|
||||||
|
"gfdl1.2.0+": "GFDL-1.2-or-later",
|
||||||
|
"gfdl1.2.0+invariants": "GFDL-1.2-invariants-or-later",
|
||||||
|
"gfdl1.2.0+noinvariants": "GFDL-1.2-no-invariants-or-later",
|
||||||
"gfdl1.2.0invariantsonly": "GFDL-1.2-invariants-only",
|
"gfdl1.2.0invariantsonly": "GFDL-1.2-invariants-only",
|
||||||
"gfdl1.2.0invariantsorlater": "GFDL-1.2-invariants-or-later",
|
"gfdl1.2.0invariantsorlater": "GFDL-1.2-invariants-or-later",
|
||||||
"gfdl1.2.0noinvariantsonly": "GFDL-1.2-no-invariants-only",
|
"gfdl1.2.0noinvariantsonly": "GFDL-1.2-no-invariants-only",
|
||||||
@ -577,7 +598,13 @@ func Test_processSPDXLicense(t *testing.T) {
|
|||||||
"gfdl1.2only": "GFDL-1.2-only",
|
"gfdl1.2only": "GFDL-1.2-only",
|
||||||
"gfdl1.2orlater": "GFDL-1.2-or-later",
|
"gfdl1.2orlater": "GFDL-1.2-or-later",
|
||||||
"gfdl1.3": "GFDL-1.3-only",
|
"gfdl1.3": "GFDL-1.3-only",
|
||||||
|
"gfdl1.3+": "GFDL-1.3-or-later",
|
||||||
|
"gfdl1.3+invariants": "GFDL-1.3-invariants-or-later",
|
||||||
|
"gfdl1.3+noinvariants": "GFDL-1.3-no-invariants-or-later",
|
||||||
"gfdl1.3.0": "GFDL-1.3-only",
|
"gfdl1.3.0": "GFDL-1.3-only",
|
||||||
|
"gfdl1.3.0+": "GFDL-1.3-or-later",
|
||||||
|
"gfdl1.3.0+invariants": "GFDL-1.3-invariants-or-later",
|
||||||
|
"gfdl1.3.0+noinvariants": "GFDL-1.3-no-invariants-or-later",
|
||||||
"gfdl1.3.0invariantsonly": "GFDL-1.3-invariants-only",
|
"gfdl1.3.0invariantsonly": "GFDL-1.3-invariants-only",
|
||||||
"gfdl1.3.0invariantsorlater": "GFDL-1.3-invariants-or-later",
|
"gfdl1.3.0invariantsorlater": "GFDL-1.3-invariants-or-later",
|
||||||
"gfdl1.3.0noinvariantsonly": "GFDL-1.3-no-invariants-only",
|
"gfdl1.3.0noinvariantsonly": "GFDL-1.3-no-invariants-only",
|
||||||
|
|||||||
@ -77,11 +77,16 @@ func (l License) canReplace(deprecated License) bool {
|
|||||||
|
|
||||||
func buildLicenseIDPermutations(cleanID string) (perms []string) {
|
func buildLicenseIDPermutations(cleanID string) (perms []string) {
|
||||||
lv := findLicenseVersion(cleanID)
|
lv := findLicenseVersion(cleanID)
|
||||||
|
addPlusPermutation := strings.HasSuffix(cleanID, "orlater")
|
||||||
vp := versionPermutations(lv)
|
vp := versionPermutations(lv)
|
||||||
|
|
||||||
permSet := strset.New()
|
permSet := strset.New()
|
||||||
version := strings.Join(lv, ".")
|
version := strings.Join(lv, ".")
|
||||||
for _, p := range vp {
|
for _, p := range vp {
|
||||||
|
if addPlusPermutation {
|
||||||
|
base := strings.TrimSuffix(cleanID, "orlater")
|
||||||
|
plus := p + "+"
|
||||||
|
permSet.Add(strings.Replace(base, version, plus, 1))
|
||||||
|
}
|
||||||
permSet.Add(strings.Replace(cleanID, version, p, 1))
|
permSet.Add(strings.Replace(cleanID, version, p, 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -94,6 +94,9 @@ func TestLicensePermutations(t *testing.T) {
|
|||||||
"gpl3orlater",
|
"gpl3orlater",
|
||||||
"gpl3.0orlater",
|
"gpl3.0orlater",
|
||||||
"gpl3.0.0orlater",
|
"gpl3.0.0orlater",
|
||||||
|
"gpl3.0.0+",
|
||||||
|
"gpl3.0+",
|
||||||
|
"gpl3+",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at 2023-06-20 11:37:07.979104 -0400 EDT m=+0.478800893
|
// This file was generated by robots at 2023-07-11 11:55:35.533815 -0400 EDT m=+0.695308614
|
||||||
// using data from https://spdx.org/licenses/licenses.json
|
// using data from https://spdx.org/licenses/licenses.json
|
||||||
package spdxlicense
|
package spdxlicense
|
||||||
|
|
||||||
@ -30,8 +30,11 @@ var licenseIDs = map[string]string{
|
|||||||
"afl3.0.0": "AFL-3.0",
|
"afl3.0.0": "AFL-3.0",
|
||||||
"afmparse": "Afmparse",
|
"afmparse": "Afmparse",
|
||||||
"agpl1": "AGPL-1.0-only",
|
"agpl1": "AGPL-1.0-only",
|
||||||
|
"agpl1+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0": "AGPL-1.0-only",
|
"agpl1.0": "AGPL-1.0-only",
|
||||||
|
"agpl1.0+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0.0": "AGPL-1.0-only",
|
"agpl1.0.0": "AGPL-1.0-only",
|
||||||
|
"agpl1.0.0+": "AGPL-1.0-or-later",
|
||||||
"agpl1.0.0only": "AGPL-1.0-only",
|
"agpl1.0.0only": "AGPL-1.0-only",
|
||||||
"agpl1.0.0orlater": "AGPL-1.0-or-later",
|
"agpl1.0.0orlater": "AGPL-1.0-or-later",
|
||||||
"agpl1.0only": "AGPL-1.0-only",
|
"agpl1.0only": "AGPL-1.0-only",
|
||||||
@ -39,8 +42,11 @@ var licenseIDs = map[string]string{
|
|||||||
"agpl1only": "AGPL-1.0-only",
|
"agpl1only": "AGPL-1.0-only",
|
||||||
"agpl1orlater": "AGPL-1.0-or-later",
|
"agpl1orlater": "AGPL-1.0-or-later",
|
||||||
"agpl3": "AGPL-3.0-only",
|
"agpl3": "AGPL-3.0-only",
|
||||||
|
"agpl3+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0": "AGPL-3.0-only",
|
"agpl3.0": "AGPL-3.0-only",
|
||||||
|
"agpl3.0+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0.0": "AGPL-3.0-only",
|
"agpl3.0.0": "AGPL-3.0-only",
|
||||||
|
"agpl3.0.0+": "AGPL-3.0-or-later",
|
||||||
"agpl3.0.0only": "AGPL-3.0-only",
|
"agpl3.0.0only": "AGPL-3.0-only",
|
||||||
"agpl3.0.0orlater": "AGPL-3.0-or-later",
|
"agpl3.0.0orlater": "AGPL-3.0-or-later",
|
||||||
"agpl3.0only": "AGPL-3.0-only",
|
"agpl3.0only": "AGPL-3.0-only",
|
||||||
@ -507,8 +513,17 @@ var licenseIDs = map[string]string{
|
|||||||
"ftl": "FTL",
|
"ftl": "FTL",
|
||||||
"gd": "GD",
|
"gd": "GD",
|
||||||
"gfdl1": "GFDL-1.1-only",
|
"gfdl1": "GFDL-1.1-only",
|
||||||
|
"gfdl1+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1": "GFDL-1.1-only",
|
"gfdl1.1": "GFDL-1.1-only",
|
||||||
|
"gfdl1.1+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1.1+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1.1+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1.0": "GFDL-1.1-only",
|
"gfdl1.1.0": "GFDL-1.1-only",
|
||||||
|
"gfdl1.1.0+": "GFDL-1.1-or-later",
|
||||||
|
"gfdl1.1.0+invariants": "GFDL-1.1-invariants-or-later",
|
||||||
|
"gfdl1.1.0+noinvariants": "GFDL-1.1-no-invariants-or-later",
|
||||||
"gfdl1.1.0invariantsonly": "GFDL-1.1-invariants-only",
|
"gfdl1.1.0invariantsonly": "GFDL-1.1-invariants-only",
|
||||||
"gfdl1.1.0invariantsorlater": "GFDL-1.1-invariants-or-later",
|
"gfdl1.1.0invariantsorlater": "GFDL-1.1-invariants-or-later",
|
||||||
"gfdl1.1.0noinvariantsonly": "GFDL-1.1-no-invariants-only",
|
"gfdl1.1.0noinvariantsonly": "GFDL-1.1-no-invariants-only",
|
||||||
@ -522,7 +537,13 @@ var licenseIDs = map[string]string{
|
|||||||
"gfdl1.1only": "GFDL-1.1-only",
|
"gfdl1.1only": "GFDL-1.1-only",
|
||||||
"gfdl1.1orlater": "GFDL-1.1-or-later",
|
"gfdl1.1orlater": "GFDL-1.1-or-later",
|
||||||
"gfdl1.2": "GFDL-1.2-only",
|
"gfdl1.2": "GFDL-1.2-only",
|
||||||
|
"gfdl1.2+": "GFDL-1.2-or-later",
|
||||||
|
"gfdl1.2+invariants": "GFDL-1.2-invariants-or-later",
|
||||||
|
"gfdl1.2+noinvariants": "GFDL-1.2-no-invariants-or-later",
|
||||||
"gfdl1.2.0": "GFDL-1.2-only",
|
"gfdl1.2.0": "GFDL-1.2-only",
|
||||||
|
"gfdl1.2.0+": "GFDL-1.2-or-later",
|
||||||
|
"gfdl1.2.0+invariants": "GFDL-1.2-invariants-or-later",
|
||||||
|
"gfdl1.2.0+noinvariants": "GFDL-1.2-no-invariants-or-later",
|
||||||
"gfdl1.2.0invariantsonly": "GFDL-1.2-invariants-only",
|
"gfdl1.2.0invariantsonly": "GFDL-1.2-invariants-only",
|
||||||
"gfdl1.2.0invariantsorlater": "GFDL-1.2-invariants-or-later",
|
"gfdl1.2.0invariantsorlater": "GFDL-1.2-invariants-or-later",
|
||||||
"gfdl1.2.0noinvariantsonly": "GFDL-1.2-no-invariants-only",
|
"gfdl1.2.0noinvariantsonly": "GFDL-1.2-no-invariants-only",
|
||||||
@ -536,7 +557,13 @@ var licenseIDs = map[string]string{
|
|||||||
"gfdl1.2only": "GFDL-1.2-only",
|
"gfdl1.2only": "GFDL-1.2-only",
|
||||||
"gfdl1.2orlater": "GFDL-1.2-or-later",
|
"gfdl1.2orlater": "GFDL-1.2-or-later",
|
||||||
"gfdl1.3": "GFDL-1.3-only",
|
"gfdl1.3": "GFDL-1.3-only",
|
||||||
|
"gfdl1.3+": "GFDL-1.3-or-later",
|
||||||
|
"gfdl1.3+invariants": "GFDL-1.3-invariants-or-later",
|
||||||
|
"gfdl1.3+noinvariants": "GFDL-1.3-no-invariants-or-later",
|
||||||
"gfdl1.3.0": "GFDL-1.3-only",
|
"gfdl1.3.0": "GFDL-1.3-only",
|
||||||
|
"gfdl1.3.0+": "GFDL-1.3-or-later",
|
||||||
|
"gfdl1.3.0+invariants": "GFDL-1.3-invariants-or-later",
|
||||||
|
"gfdl1.3.0+noinvariants": "GFDL-1.3-no-invariants-or-later",
|
||||||
"gfdl1.3.0invariantsonly": "GFDL-1.3-invariants-only",
|
"gfdl1.3.0invariantsonly": "GFDL-1.3-invariants-only",
|
||||||
"gfdl1.3.0invariantsorlater": "GFDL-1.3-invariants-or-later",
|
"gfdl1.3.0invariantsorlater": "GFDL-1.3-invariants-or-later",
|
||||||
"gfdl1.3.0noinvariantsonly": "GFDL-1.3-no-invariants-only",
|
"gfdl1.3.0noinvariantsonly": "GFDL-1.3-no-invariants-only",
|
||||||
|
|||||||
@ -12,5 +12,6 @@ func TestLicenceListIDs(t *testing.T) {
|
|||||||
assert.Equal(t, "ZPL-2.1", licenseIDs["zpl2.1"])
|
assert.Equal(t, "ZPL-2.1", licenseIDs["zpl2.1"])
|
||||||
assert.Equal(t, "GPL-2.0-only", licenseIDs["gpl2"])
|
assert.Equal(t, "GPL-2.0-only", licenseIDs["gpl2"])
|
||||||
assert.Equal(t, "GPL-2.0-or-later", licenseIDs["gpl2+"])
|
assert.Equal(t, "GPL-2.0-or-later", licenseIDs["gpl2+"])
|
||||||
|
assert.Equal(t, "GFDL-1.2-or-later", licenseIDs["gfdl1.2+"])
|
||||||
assert.NotEmpty(t, Version)
|
assert.NotEmpty(t, Version)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user