CVSS
view release on metacpan or search on metacpan
lib/CVSS/v4.pm view on Meta::CPAN
my $current_severity_distance_eq5 = 0;
# if the next lower macro score do not exist the result is Nan
# Rename to maximal scoring difference (aka MSD)
my $available_distance_eq1 = $value - $score_eq1_next_lower_macro;
my $available_distance_eq2 = $value - $score_eq2_next_lower_macro;
my $available_distance_eq3eq6 = $value - $score_eq3eq6_next_lower_macro;
my $available_distance_eq4 = $value - $score_eq4_next_lower_macro;
my $available_distance_eq5 = $value - $score_eq5_next_lower_macro;
my $percent_to_next_eq1_severity = 0;
my $percent_to_next_eq2_severity = 0;
my $percent_to_next_eq3eq6_severity = 0;
my $percent_to_next_eq4_severity = 0;
my $percent_to_next_eq5_severity = 0;
my $normalized_severity_eq1 = 0;
my $normalized_severity_eq2 = 0;
my $normalized_severity_eq3eq6 = 0;
my $normalized_severity_eq4 = 0;
my $normalized_severity_eq5 = 0;
# multiply by step because distance is pure
my $max_severity_eq1 = $MAX_SEVERITY->{eq1}->{$eq1} * $step;
my $max_severity_eq2 = $MAX_SEVERITY->{eq2}->{$eq2} * $step;
lib/CVSS/v4.pm view on Meta::CPAN
# c. The proportion of the distance is determined by dividing
# the severity distance of the to-be-scored vector by the depth
# of the MacroVector.
# d. The maximal scoring difference is multiplied by the proportion of
# distance.
my $n_existing_lower = 0;
if (!isNaN($available_distance_eq1) && $available_distance_eq1 >= 0) {
$n_existing_lower += 1;
$percent_to_next_eq1_severity = ($current_severity_distance_eq1) / $max_severity_eq1;
$normalized_severity_eq1 = $available_distance_eq1 * $percent_to_next_eq1_severity;
}
if (!isNaN($available_distance_eq2) && $available_distance_eq2 >= 0) {
$n_existing_lower += 1;
$percent_to_next_eq2_severity = ($current_severity_distance_eq2) / $max_severity_eq2;
$normalized_severity_eq2 = $available_distance_eq2 * $percent_to_next_eq2_severity;
}
if (!isNaN($available_distance_eq3eq6) && $available_distance_eq3eq6 >= 0) {
$n_existing_lower += 1;
$percent_to_next_eq3eq6_severity = ($current_severity_distance_eq3eq6) / $max_severity_eq3eq6;
$normalized_severity_eq3eq6 = $available_distance_eq3eq6 * $percent_to_next_eq3eq6_severity;
}
if (!isNaN($available_distance_eq4) && $available_distance_eq4 >= 0) {
$n_existing_lower += 1;
$percent_to_next_eq4_severity = ($current_severity_distance_eq4) / $max_severity_eq4;
$normalized_severity_eq4 = $available_distance_eq4 * $percent_to_next_eq4_severity;
}
if (!isNaN($available_distance_eq5) && $available_distance_eq5 >= 0) {
$n_existing_lower += 1;
$percent_to_next_eq5_severity = 0;
$normalized_severity_eq5 = $available_distance_eq5 * $percent_to_next_eq5_severity;
}
my $mean_distance = undef;
# 2. The mean of the above computed proportional distances is computed.
if ($n_existing_lower == 0) {
$mean_distance = 0;
}
else {
# sometimes we need to go up but there is nothing there, or down but there is nothing there so it's a change of 0.
( run in 0.404 second using v1.01-cache-2.11-cpan-624ce96ca49 )