diff options
Diffstat (limited to 'jsonloader/parser2v2/util.go')
-rw-r--r-- | jsonloader/parser2v2/util.go | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/jsonloader/parser2v2/util.go b/jsonloader/parser2v2/util.go deleted file mode 100644 index 6676846..0000000 --- a/jsonloader/parser2v2/util.go +++ /dev/null @@ -1,115 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later - -package parser2v2 - -import ( - "fmt" - "strings" - - "github.com/spdx/tools-golang/spdx" -) - -// used to extract key / value from embedded substrings -// returns subkey, subvalue, nil if no error, or "", "", error otherwise -func extractSubs(value string) (string, string, error) { - // parse the value to see if it's a valid subvalue format - sp := strings.SplitN(value, ":", 2) - if len(sp) == 1 { - return "", "", fmt.Errorf("invalid subvalue format for %s (no colon found)", value) - } - - subkey := strings.TrimSpace(sp[0]) - subvalue := strings.TrimSpace(sp[1]) - - return subkey, subvalue, nil -} - -// used to extract DocumentRef and SPDXRef values from an SPDX Identifier -// which can point either to this document or to a different one -func extractDocElementID(value string) (spdx.DocElementID, error) { - docRefID := "" - idStr := value - - // check prefix to see if it's a DocumentRef ID - if strings.HasPrefix(idStr, "DocumentRef-") { - // extract the part that comes between "DocumentRef-" and ":" - strs := strings.Split(idStr, ":") - // should be exactly two, part before and part after - if len(strs) < 2 { - return spdx.DocElementID{}, fmt.Errorf("no colon found although DocumentRef- prefix present") - } - if len(strs) > 2 { - return spdx.DocElementID{}, fmt.Errorf("more than one colon found") - } - - // trim the prefix and confirm non-empty - docRefID = strings.TrimPrefix(strs[0], "DocumentRef-") - if docRefID == "" { - return spdx.DocElementID{}, fmt.Errorf("document identifier has nothing after prefix") - } - // and use remainder for element ID parsing - idStr = strs[1] - } - - // check prefix to confirm it's got the right prefix for element IDs - if !strings.HasPrefix(idStr, "SPDXRef-") { - return spdx.DocElementID{}, fmt.Errorf("missing SPDXRef- prefix for element identifier") - } - - // make sure no colons are present - if strings.Contains(idStr, ":") { - // we know this means there was no DocumentRef- prefix, because - // we would have handled multiple colons above if it was - return spdx.DocElementID{}, fmt.Errorf("invalid colon in element identifier") - } - - // trim the prefix and confirm non-empty - eltRefID := strings.TrimPrefix(idStr, "SPDXRef-") - if eltRefID == "" { - return spdx.DocElementID{}, fmt.Errorf("element identifier has nothing after prefix") - } - - // we're good - return spdx.DocElementID{DocumentRefID: docRefID, ElementRefID: spdx.ElementID(eltRefID)}, nil -} - -// used to extract SPDXRef values from an SPDX Identifier, OR "special" strings -// from a specified set of permitted values. The primary use case for this is -// the right-hand side of Relationships, where beginning in SPDX 2.2 the values -// "NONE" and "NOASSERTION" are permitted. If the value does not match one of -// the specified permitted values, it will fall back to the ordinary -// DocElementID extractor. -func extractDocElementSpecial(value string, permittedSpecial []string) (spdx.DocElementID, error) { - // check value against special set first - for _, sp := range permittedSpecial { - if sp == value { - return spdx.DocElementID{SpecialID: sp}, nil - } - } - // not found, fall back to regular search - return extractDocElementID(value) -} - -// used to extract SPDXRef values only from an SPDX Identifier which can point -// to this document only. Use extractDocElementID for parsing IDs that can -// refer either to this document or a different one. -func extractElementID(value string) (spdx.ElementID, error) { - // check prefix to confirm it's got the right prefix for element IDs - if !strings.HasPrefix(value, "SPDXRef-") { - return spdx.ElementID(""), fmt.Errorf("missing SPDXRef- prefix for element identifier") - } - - // make sure no colons are present - if strings.Contains(value, ":") { - return spdx.ElementID(""), fmt.Errorf("invalid colon in element identifier") - } - - // trim the prefix and confirm non-empty - eltRefID := strings.TrimPrefix(value, "SPDXRef-") - if eltRefID == "" { - return spdx.ElementID(""), fmt.Errorf("element identifier has nothing after prefix") - } - - // we're good - return spdx.ElementID(eltRefID), nil -} |