@@ -50,13 +50,16 @@ func (a AptAnalyzer) Analyze(image pkgutil.Image) (util.Result, error) {
5050}
5151
5252func (a AptAnalyzer ) getPackages (image pkgutil.Image ) (map [string ]util.PackageInfo , error ) {
53- path := image .FSPath
53+ return readStatusFile (image .FSPath )
54+ }
55+
56+ func readStatusFile (root string ) (map [string ]util.PackageInfo , error ) {
5457 packages := make (map [string ]util.PackageInfo )
55- if _ , err := os .Stat (path ); err != nil {
58+ if _ , err := os .Stat (root ); err != nil {
5659 // invalid image directory path
5760 return packages , err
5861 }
59- statusFile := filepath .Join (path , dpkgStatusFile )
62+ statusFile := filepath .Join (root , dpkgStatusFile )
6063 if _ , err := os .Stat (statusFile ); err != nil {
6164 // status file does not exist in this layer
6265 return packages , nil
@@ -154,28 +157,10 @@ func (a AptLayerAnalyzer) getPackages(image pkgutil.Image) ([]map[string]util.Pa
154157 return packages , nil
155158 }
156159 for _ , layer := range image .Layers {
157- layerPackages := make (map [string ]util.PackageInfo )
158- if _ , err := os .Stat (layer .FSPath ); err != nil {
159- // invalid layer directory path
160+ layerPackages , err := readStatusFile (layer .FSPath )
161+ if err != nil {
160162 return packages , err
161163 }
162- statusFile := filepath .Join (layer .FSPath , dpkgStatusFile )
163- if _ , err := os .Stat (statusFile ); err == nil {
164- // this layer has a package database
165- if file , err := os .Open (statusFile ); err == nil {
166- // make sure it gets closed
167- defer file .Close ()
168-
169- // create a new scanner and read the file line by line
170- scanner := bufio .NewScanner (file )
171- var currPackage string
172- for scanner .Scan () {
173- currPackage = parseLine (scanner .Text (), currPackage , layerPackages )
174- }
175- } else {
176- return packages , err
177- }
178- }
179164 packages = append (packages , layerPackages )
180165 }
181166
0 commit comments