26
26
import java .util .List ;
27
27
import java .util .Map ;
28
28
import java .util .Optional ;
29
+ import java .util .Set ;
29
30
import java .util .concurrent .atomic .AtomicInteger ;
30
31
import java .util .stream .Collectors ;
31
32
53
54
import com .redhat .exhort .model .CvssScoreComparable .DependencyScoreComparator ;
54
55
import com .redhat .exhort .model .CvssScoreComparable .TransitiveScoreComparator ;
55
56
import com .redhat .exhort .model .DependencyTree ;
57
+ import com .redhat .exhort .model .DirectDependency ;
56
58
import com .redhat .exhort .model .ProviderResponse ;
57
59
import com .redhat .exhort .model .trustedcontent .IndexedRecommendation ;
58
60
import com .redhat .exhort .model .trustedcontent .TrustedContentResponse ;
@@ -425,9 +427,21 @@ private SourceSummary buildSummary(
425
427
var counter = new VulnerabilityCounter ();
426
428
var directRefs =
427
429
tree .dependencies ().keySet ().stream ().map (PackageRef ::ref ).collect (Collectors .toSet ());
430
+ var transitiveRefs =
431
+ tree .dependencies ().values ().stream ()
432
+ .map (DirectDependency ::transitive )
433
+ .flatMap (Set ::stream )
434
+ .map (PackageRef ::ref )
435
+ .toList ();
428
436
issuesData
429
437
.entrySet ()
430
- .forEach (e -> incrementCounter (e .getValue (), counter , directRefs .contains (e .getKey ())));
438
+ .forEach (
439
+ e ->
440
+ incrementCounter (
441
+ e .getValue (),
442
+ counter ,
443
+ directRefs .contains (e .getKey ()),
444
+ transitiveRefs .contains (e .getKey ())));
431
445
Long recommendationsCount =
432
446
sourceReport .stream ().filter (s -> s .getRecommendation () != null ).count ();
433
447
counter .recommendations .set (recommendationsCount .intValue ());
@@ -436,7 +450,7 @@ private SourceSummary buildSummary(
436
450
}
437
451
438
452
private void incrementCounter (
439
- List <Issue > issues , VulnerabilityCounter counter , boolean isDirect ) {
453
+ List <Issue > issues , VulnerabilityCounter counter , boolean isDirect , boolean isTransitive ) {
440
454
if (!issues .isEmpty ()) {
441
455
counter .dependencies .incrementAndGet ();
442
456
}
@@ -453,6 +467,9 @@ private void incrementCounter(
453
467
if (isDirect ) {
454
468
counter .direct .addAndGet (vulnerabilities );
455
469
}
470
+ if (isTransitive ) {
471
+ counter .transitive .addAndGet (vulnerabilities );
472
+ }
456
473
if (i .getRemediation () != null
457
474
&& i .getRemediation ().getTrustedContent () != null
458
475
&& i .getRemediation ().getTrustedContent ().getRef () != null ) {
@@ -475,6 +492,7 @@ private int countVulnerabilities(Issue i) {
475
492
476
493
private static final record VulnerabilityCounter (
477
494
AtomicInteger total ,
495
+ AtomicInteger transitive ,
478
496
AtomicInteger critical ,
479
497
AtomicInteger high ,
480
498
AtomicInteger medium ,
@@ -496,6 +514,7 @@ private static final record VulnerabilityCounter(
496
514
new AtomicInteger (),
497
515
new AtomicInteger (),
498
516
new AtomicInteger (),
517
+ new AtomicInteger (),
499
518
new AtomicInteger ());
500
519
}
501
520
@@ -507,10 +526,9 @@ SourceSummary getSummary() {
507
526
.medium (medium .get ())
508
527
.low (low .get ())
509
528
.direct (direct .get ())
510
- .transitive (total . get () - direct .get ())
529
+ .transitive (transitive .get ())
511
530
.dependencies (dependencies .get ())
512
531
.remediations (remediations .get ())
513
- // Will be calculated later when TC recommendations will be added.
514
532
.recommendations (recommendations .get ())
515
533
.unscanned (unscanned .get ());
516
534
}
0 commit comments