@@ -30,18 +30,14 @@ impl From<JsonScanResultV1> for ScanResult {
3030}
3131
3232fn add_layers ( report : & JsonResult , scan_result : & mut ScanResult ) {
33- report
34- . layers
35- . values ( )
36- . filter ( |json_layer| !json_layer. digest . is_empty ( ) )
37- . for_each ( |json_layer| {
38- scan_result. add_layer (
39- json_layer. digest . clone ( ) ,
40- json_layer. index ,
41- json_layer. size ,
42- json_layer. command . clone ( ) . unwrap_or_default ( ) ,
43- ) ;
44- } ) ;
33+ report. layers . values ( ) . for_each ( |json_layer| {
34+ scan_result. add_layer (
35+ json_layer. digest . clone ( ) ,
36+ json_layer. index ,
37+ json_layer. size ,
38+ json_layer. command . clone ( ) . unwrap_or_default ( ) ,
39+ ) ;
40+ } ) ;
4541}
4642
4743fn add_risk_accepts ( result : & JsonResult , scan_result : & mut ScanResult ) {
@@ -632,4 +628,51 @@ mod tests {
632628 ) ;
633629 // assert_eq!(scan_result.vulnerabilities().len(), 97);
634630 }
631+
632+ #[ test]
633+ fn test_handles_layers_without_digest ( ) {
634+ let postgres_13_json = include_bytes ! ( "../../tests/fixtures/scan-results/postgres_13.json" ) ;
635+ let json_scan_result: JsonScanResultV1 = serde_json:: from_slice ( postgres_13_json) . unwrap ( ) ;
636+ let scan_result: ScanResult = json_scan_result. into ( ) ;
637+
638+ assert_eq ! (
639+ scan_result. layers( ) . len( ) ,
640+ 25 ,
641+ "Should have 25 layers in total"
642+ ) ;
643+
644+ let layers_with_digest = scan_result
645+ . layers ( )
646+ . into_iter ( )
647+ . filter ( |l| l. digest ( ) . is_some ( ) )
648+ . count ( ) ;
649+ assert_eq ! (
650+ layers_with_digest, 14 ,
651+ "Should have 14 layers with a digest"
652+ ) ;
653+
654+ let layers_without_digest = scan_result
655+ . layers ( )
656+ . into_iter ( )
657+ . filter ( |l| l. digest ( ) . is_none ( ) )
658+ . count ( ) ;
659+ assert_eq ! (
660+ layers_without_digest, 11 ,
661+ "Should have 11 layers without a digest"
662+ ) ;
663+
664+ assert ! (
665+ scan_result. find_layer_by_digest( "" ) . is_none( ) ,
666+ "Searching for an empty digest should return None"
667+ ) ;
668+ assert ! (
669+ scan_result. find_layer_by_digest( " " ) . is_none( ) ,
670+ "Searching for a whitespace digest should return None"
671+ ) ;
672+
673+ let digest = "sha256:04d52f0a5b32b0f627bbd4427a0374f0a8d2d409dbbfda0099d89b87c774df36" ;
674+ let found_layer = scan_result. find_layer_by_digest ( digest) ;
675+ assert ! ( found_layer. is_some( ) , "Should find layer by valid digest" ) ;
676+ assert_eq ! ( found_layer. unwrap( ) . digest( ) , Some ( digest) ) ;
677+ }
635678}
0 commit comments