aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGeogeFI2022-04-02 14:01:01 +0200
committerGeogeFI2022-04-02 14:01:01 +0200
commit752b7651f2f77126a0259f56155a6fe9d5bd063a (patch)
tree8082c0dc65b3c70533cb8980a289faf4f5b04553
parent466b25540f5230e846c71318621625425b24cfaa (diff)
downloadsec-certs-752b7651f2f77126a0259f56155a6fe9d5bd063a.tar.gz
sec-certs-752b7651f2f77126a0259f56155a6fe9d5bd063a.tar.zst
sec-certs-752b7651f2f77126a0259f56155a6fe9d5bd063a.zip
feat: Implemented mechanism for skipping duplicates in dependency vulnerabilities evaluation
-rw-r--r--sec_certs/dataset/common_criteria.py12
-rw-r--r--sec_certs/sample/common_criteria.py7
2 files changed, 18 insertions, 1 deletions
diff --git a/sec_certs/dataset/common_criteria.py b/sec_certs/dataset/common_criteria.py
index c5966c97..09dcbe23 100644
--- a/sec_certs/dataset/common_criteria.py
+++ b/sec_certs/dataset/common_criteria.py
@@ -754,6 +754,18 @@ class CCDataset(Dataset[CommonCriteriaCert], ComplexSerializableType):
keywords.add("1.02.013")
return {x for x in keywords if len(x) > config.minimal_token_length}
+ def get_dataset_cert_ids_occurrences(self) -> Dict[str, int]:
+ all_cert_ids: Dict[str, int] = {}
+
+ for cert_obj in self:
+ if cert_obj.heuristics.cert_id is None:
+ continue
+
+ cert_id = cert_obj.heuristics.cert_id
+ all_cert_ids[cert_id] = all_cert_ids.get(cert_id, 0) + 1
+
+ return all_cert_ids
+
class CCDatasetMaintenanceUpdates(CCDataset, ComplexSerializableType):
"""
diff --git a/sec_certs/sample/common_criteria.py b/sec_certs/sample/common_criteria.py
index 6f797f6d..8e80a34b 100644
--- a/sec_certs/sample/common_criteria.py
+++ b/sec_certs/sample/common_criteria.py
@@ -708,13 +708,18 @@ class CommonCriteriaCert(
return None
vulnerabilities = set()
+ dataset_cert_id_occurrences = dset.get_dataset_cert_ids_occurrences()
for cert_id in references:
+ cert_id_occurrence = dataset_cert_id_occurrences.get(cert_id, None)
+
+ # Not in dataset or more than 2 occurrences in dataset -> skip
+ if cert_id_occurrence is None or cert_id_occurrence >= 2:
+ continue
for cert_obj in dset:
if cert_obj.heuristics.cert_id == cert_id:
if cert_obj.heuristics.related_cves:
-
vulnerabilities.update(cert_obj.heuristics.related_cves)
if not vulnerabilities: