github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/detection/peek.go (about) 1 package detection 2 3 import ( 4 "archive/tar" 5 "compress/gzip" 6 "errors" 7 "io" 8 "strings" 9 ) 10 11 func IsHelmChartArchive(path string, file io.Reader) bool { 12 13 if !IsArchive(path) { 14 return false 15 } 16 17 var err error 18 var fr = file 19 20 if IsZip(path) { 21 if fr, err = gzip.NewReader(file); err != nil { 22 return false 23 } 24 } 25 tr := tar.NewReader(fr) 26 27 if tr == nil { 28 return false 29 } 30 31 for { 32 header, err := tr.Next() 33 if err != nil { 34 if errors.Is(err, io.EOF) { 35 break 36 } 37 return false 38 } 39 40 if header.Typeflag == tar.TypeReg && strings.HasSuffix(header.Name, "Chart.yaml") { 41 return true 42 } 43 } 44 return false 45 } 46 47 func IsArchive(path string) bool { 48 if strings.HasSuffix(path, ".tar") || IsZip(path) { 49 return true 50 } 51 return false 52 } 53 54 func IsZip(path string) bool { 55 if strings.HasSuffix(path, ".tgz") || 56 strings.HasSuffix(path, ".tar.gz") { 57 return true 58 } 59 return false 60 }