diff options
| -rw-r--r-- | sec_certs/model/cpe_matching.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sec_certs/model/cpe_matching.py b/sec_certs/model/cpe_matching.py index ac96d1de..e1039099 100644 --- a/sec_certs/model/cpe_matching.py +++ b/sec_certs/model/cpe_matching.py @@ -193,7 +193,9 @@ class CPEClassifier(BaseEstimator): @return: List of tuples (cpe_vendor, cpe_version) that can be used in the lookup table to search the CPE dataset. """ - def is_cpe_version_among_cert_versions(cpe_version: str, cert_versions: List[str]) -> bool: + def is_cpe_version_among_cert_versions(cpe_version: Optional[str], cert_versions: List[str]) -> bool: + if not cpe_version: + return False just_numbers = r'(\d{1,5})(\.\d{1,5})' # TODO: The use of this should be double-checked for v in cert_versions: if (v.startswith(cpe_version) and re.search(just_numbers, cpe_version)) or cpe_version.startswith(v): @@ -205,7 +207,7 @@ class CPEClassifier(BaseEstimator): candidate_vendor_version_pairs: List[Tuple[str, str]] = [] for vendor in cert_candidate_cpe_vendors: - viable_cpe_versions = self.vendor_to_versions_[vendor] + viable_cpe_versions = self.vendor_to_versions_.get(vendor, set()) matched_cpe_versions = [x for x in viable_cpe_versions if is_cpe_version_among_cert_versions(x, cert_candidate_versions)] candidate_vendor_version_pairs.extend([(vendor, x) for x in matched_cpe_versions]) return candidate_vendor_version_pairs |
