diff options
author | Paul Duncan <pabs@pablotron.org> | 2022-02-04 00:35:31 -0500 |
---|---|---|
committer | Paul Duncan <pabs@pablotron.org> | 2022-02-04 00:35:31 -0500 |
commit | 9c17b97cd0f83be3fff9fa4e87fd1d29052ea616 (patch) | |
tree | 0d97030a0d0c3ad983be281ce89f80571338887f /internal/feed/cveid.go | |
parent | 92400d731546557d110c9c3cc3906d700f83dda8 (diff) | |
download | cvez-9c17b97cd0f83be3fff9fa4e87fd1d29052ea616.tar.bz2 cvez-9c17b97cd0f83be3fff9fa4e87fd1d29052ea616.zip |
rename to github.com/pablotron/cvez, remove internal libs
Diffstat (limited to 'internal/feed/cveid.go')
-rw-r--r-- | internal/feed/cveid.go | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/internal/feed/cveid.go b/internal/feed/cveid.go deleted file mode 100644 index 8796029..0000000 --- a/internal/feed/cveid.go +++ /dev/null @@ -1,112 +0,0 @@ -package feed - -import ( - "encoding/json" - "fmt" - "regexp" - "strconv" -) - -// CVE ID -type CveId uint32 - -var cveIdRe = regexp.MustCompile("\\ACVE-(\\d{4})-(\\d{1,8})\\z") - -// parse year component of CVE ID -func parseCveIdYear(s string) (uint16, error) { - // parse year, check for error - year, err := strconv.ParseUint(s, 10, 16) - if err != nil { - return 0, err - } - - // check bounds - if year < 2000 || year > 2127 { - return 0, fmt.Errorf("year out of bounds: %s", s) - } - - // return value - return uint16(year), nil -} - -// parse number component of CVE ID -func parseCveIdNum(s string) (uint32, error) { - // parse number, check for error - num, err := strconv.ParseUint(s, 10, 32) - if err != nil { - return 0, err - } - - // check bounds - if num > 0x01ffffff { - return 0, fmt.Errorf("number out of bounds: %d", num) - } - - // return value - return uint32(num), nil -} - -// Encode CVE ID as uint32. -func encodeCveId(year uint16, num uint32) uint32 { - return uint32((uint32((year - 2000) & 0x7f) << 25) | (num & 0x01ffffff)) -} - -// Create CVE ID from string. -func NewCveId(s string) (CveId, error) { - // match components, check for error - md := cveIdRe.FindStringSubmatch(s) - if len(md) != 3 { - return CveId(0), fmt.Errorf("invalid CVE ID: %s", s) - } - - // parse year, check for error - year, err := parseCveIdYear(md[1]) - if err != nil { - return CveId(0), err - } - - // parse number, check for error - num, err := parseCveIdNum(md[2]) - if err != nil { - return CveId(0), err - } - - // encode and return result - return CveId(encodeCveId(year, num)), nil -} - -// Unmarshal CVE ID from JSON. -func (me *CveId) UnmarshalJSON(b []byte) error { - // decode string, check for error - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - - // parse year, check for error - r, err := NewCveId(s) - if err != nil { - return err - } - - // serialize ID - *me = r - - // return success - return nil -} - -// Get year component. -func (me CveId) Year() uint16 { - return uint16((uint32(me) >> 25) & 0x7f) + 2000 -} - -// Get number component. -func (me CveId) Number() uint32 { - return (uint32(me) & 0x01ffffff) -} - -// Return string representation of CVE ID. -func (me CveId) String() string { - return fmt.Sprintf("CVE-%04d-%04d", me.Year(), me.Number()) -} |