diff options
| author | GeogeFI | 2022-04-02 14:01:01 +0200 |
|---|---|---|
| committer | GeogeFI | 2022-04-02 14:01:01 +0200 |
| commit | 752b7651f2f77126a0259f56155a6fe9d5bd063a (patch) | |
| tree | 8082c0dc65b3c70533cb8980a289faf4f5b04553 | |
| parent | 466b25540f5230e846c71318621625425b24cfaa (diff) | |
| download | sec-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.py | 12 | ||||
| -rw-r--r-- | sec_certs/sample/common_criteria.py | 7 |
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: |
