github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/deb/parse_dpkg_info_files.go (about) 1 package deb 2 3 import ( 4 "bufio" 5 "io" 6 "strings" 7 8 "github.com/anchore/syft/syft/file" 9 "github.com/anchore/syft/syft/pkg" 10 ) 11 12 func parseDpkgMD5Info(reader io.Reader) (findings []pkg.DpkgFileRecord) { 13 scanner := bufio.NewScanner(reader) 14 15 for scanner.Scan() { 16 line := scanner.Text() 17 fields := strings.SplitN(line, " ", 2) 18 if len(fields) == 2 { 19 path := strings.TrimSpace(fields[1]) 20 if !strings.HasPrefix(path, "/") { 21 path = "/" + path 22 } 23 findings = append(findings, pkg.DpkgFileRecord{ 24 Path: path, 25 Digest: &file.Digest{ 26 Algorithm: "md5", 27 Value: strings.TrimSpace(fields[0]), 28 }, 29 }) 30 } 31 } 32 return findings 33 } 34 35 func parseDpkgConffileInfo(reader io.Reader) (findings []pkg.DpkgFileRecord) { 36 scanner := bufio.NewScanner(reader) 37 38 for scanner.Scan() { 39 line := strings.Trim(scanner.Text(), " \n") 40 fields := strings.SplitN(line, " ", 2) 41 42 if line == "" { 43 continue 44 } 45 46 var path string 47 if len(fields) >= 1 { 48 path = strings.TrimSpace(fields[0]) 49 if !strings.HasPrefix(path, "/") { 50 path = "/" + path 51 } 52 } 53 54 var digest *file.Digest 55 if len(fields) >= 2 { 56 digest = &file.Digest{ 57 Algorithm: "md5", 58 Value: strings.TrimSpace(fields[1]), 59 } 60 } 61 62 if path != "" { 63 record := pkg.DpkgFileRecord{ 64 Path: path, 65 IsConfigFile: true, 66 } 67 if digest != nil { 68 record.Digest = digest 69 } 70 findings = append(findings, record) 71 } 72 } 73 return findings 74 }