aboutsummaryrefslogtreecommitdiff
path: root/tvloader/parser2v1/parse_package.go
diff options
context:
space:
mode:
Diffstat (limited to 'tvloader/parser2v1/parse_package.go')
-rw-r--r--tvloader/parser2v1/parse_package.go48
1 files changed, 23 insertions, 25 deletions
diff --git a/tvloader/parser2v1/parse_package.go b/tvloader/parser2v1/parse_package.go
index a867107..22fc1ed 100644
--- a/tvloader/parser2v1/parse_package.go
+++ b/tvloader/parser2v1/parse_package.go
@@ -45,16 +45,17 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
}
parser.pkg.PackageSPDXIdentifier = eID
if parser.doc.Packages == nil {
- parser.doc.Packages = map[spdx.ElementID]*spdx.Package2_1{}
+ parser.doc.Packages = []*spdx.Package2_1{}
}
- parser.doc.Packages[eID] = parser.pkg
+ parser.doc.Packages = append(parser.doc.Packages, parser.pkg)
case "PackageVersion":
parser.pkg.PackageVersion = value
case "PackageFileName":
parser.pkg.PackageFileName = value
case "PackageSupplier":
+ parser.pkg.PackageSupplier = &spdx.Supplier{}
if value == "NOASSERTION" {
- parser.pkg.PackageSupplierNOASSERTION = true
+ parser.pkg.PackageSupplier.Supplier = value
break
}
subkey, subvalue, err := extractSubs(value)
@@ -62,16 +63,16 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
return err
}
switch subkey {
- case "Person":
- parser.pkg.PackageSupplierPerson = subvalue
- case "Organization":
- parser.pkg.PackageSupplierOrganization = subvalue
+ case "Person", "Organization":
+ parser.pkg.PackageSupplier.Supplier = subvalue
+ parser.pkg.PackageSupplier.SupplierType = subkey
default:
return fmt.Errorf("unrecognized PackageSupplier type %v", subkey)
}
case "PackageOriginator":
+ parser.pkg.PackageOriginator = &spdx.Originator{}
if value == "NOASSERTION" {
- parser.pkg.PackageOriginatorNOASSERTION = true
+ parser.pkg.PackageOriginator.Originator = value
break
}
subkey, subvalue, err := extractSubs(value)
@@ -79,10 +80,9 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
return err
}
switch subkey {
- case "Person":
- parser.pkg.PackageOriginatorPerson = subvalue
- case "Organization":
- parser.pkg.PackageOriginatorOrganization = subvalue
+ case "Person", "Organization":
+ parser.pkg.PackageOriginator.Originator = subvalue
+ parser.pkg.PackageOriginator.OriginatorType = subkey
default:
return fmt.Errorf("unrecognized PackageOriginator type %v", subkey)
}
@@ -96,21 +96,19 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
parser.pkg.FilesAnalyzed = true
}
case "PackageVerificationCode":
- code, excludesFileName := extractCodeAndExcludes(value)
- parser.pkg.PackageVerificationCode = code
- parser.pkg.PackageVerificationCodeExcludedFile = excludesFileName
+ parser.pkg.PackageVerificationCode = extractCodeAndExcludes(value)
case "PackageChecksum":
subkey, subvalue, err := extractSubs(value)
if err != nil {
return err
}
- switch subkey {
- case "SHA1":
- parser.pkg.PackageChecksumSHA1 = subvalue
- case "SHA256":
- parser.pkg.PackageChecksumSHA256 = subvalue
- case "MD5":
- parser.pkg.PackageChecksumMD5 = subvalue
+ if parser.pkg.PackageChecksums == nil {
+ parser.pkg.PackageChecksums = []spdx.Checksum{}
+ }
+ switch spdx.ChecksumAlgorithm(subkey) {
+ case spdx.SHA1, spdx.SHA256, spdx.MD5:
+ algorithm := spdx.ChecksumAlgorithm(subkey)
+ parser.pkg.PackageChecksums = append(parser.pkg.PackageChecksums, spdx.Checksum{Algorithm: algorithm, Value: subvalue})
default:
return fmt.Errorf("got unknown checksum type %s", subkey)
}
@@ -184,13 +182,13 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
// ===== Helper functions =====
-func extractCodeAndExcludes(value string) (string, string) {
+func extractCodeAndExcludes(value string) spdx.PackageVerificationCode {
// FIXME this should probably be done using regular expressions instead
// split by paren + word "excludes:"
sp := strings.SplitN(value, "(excludes:", 2)
if len(sp) < 2 {
// not found; return the whole string as just the code
- return value, ""
+ return spdx.PackageVerificationCode{Value: value, ExcludedFiles: []string{}}
}
// if we're here, code is in first part and excludes filename is in
@@ -198,7 +196,7 @@ func extractCodeAndExcludes(value string) (string, string) {
code := strings.TrimSpace(sp[0])
parsedSp := strings.SplitN(sp[1], ")", 2)
fileName := strings.TrimSpace(parsedSp[0])
- return code, fileName
+ return spdx.PackageVerificationCode{Value: code, ExcludedFiles: []string{fileName}}
}
func extractPackageExternalReference(value string) (string, string, string, error) {