func newMetaFile()

in providers/nvd/cve.go [452:501]


func newMetaFile(r io.Reader) (metaFile, error) {
	m := metaFile{}
	r = io.LimitReader(r, 16*1024)
	b, err := ioutil.ReadAll(r)
	if err != nil {
		return m, err
	}
	lines := bytes.Split(b, []byte("\r\n"))
	for i, line := range lines {
		if len(line) == 0 {
			break
		}
		lineno := i + 1
		parts := bytes.SplitN(line, []byte(":"), 2)
		if len(parts) != 2 {
			return m, fmt.Errorf("line %d: expecting key:value not %q", lineno, string(line))
		}
		key := string(parts[0])
		val := string(parts[1])
		switch key {
		case "lastModifiedDate":
			t, err := time.Parse(time.RFC3339, val)
			if err != nil {
				return m, fmt.Errorf("line %d: expecting lastModifiedDate={RFC3339} not %q", lineno, string(line))
			}
			m.LastModifiedDate = t
		case "size":
			v, err := strconv.Atoi(val)
			if err != nil {
				return m, fmt.Errorf("line %d: expecting size={int} not %q", lineno, string(line))
			}
			m.Size = v
		case "zipSize":
			v, err := strconv.Atoi(val)
			if err != nil {
				return m, fmt.Errorf("line %d: expecting zipSize={int} not %q", lineno, string(line))
			}
			m.ZipSize = v
		case "gzSize":
			v, err := strconv.Atoi(val)
			if err != nil {
				return m, fmt.Errorf("line %d: expecting gzSize={int} not %q", lineno, string(line))
			}
			m.GzSize = v
		case "sha256":
			m.SHA256 = strings.ToUpper(val)
		}
	}
	return m, nil
}