diff --git a/netutils/nist.py b/netutils/nist.py index a316280..32f3b5d 100644 --- a/netutils/nist.py +++ b/netutils/nist.py @@ -219,7 +219,8 @@ def _os_platform_object_builder(vendor: str, platform: str, version: str) -> obj } if version_parser: - field_values.update(version_parser) + valid_fields = {field[0] for field in class_fields} + field_values.update({key: value for key, value in version_parser.items() if key in valid_fields}) class_name = f"{vendor.capitalize()}{platform.capitalize()}" get_nist_urls_func = get_nist_url_funcs.get(vendor, {}).get(platform) or get_nist_url_funcs["default"] diff --git a/tests/unit/test_nist.py b/tests/unit/test_nist.py index 2d1c830..187dbed 100644 --- a/tests/unit/test_nist.py +++ b/tests/unit/test_nist.py @@ -48,3 +48,19 @@ def test_get_nist_urls_failed(): def test_get_nist_vendor_platform_urls(): platform_obj = nist.get_nist_vendor_platform_urls("cisco", "ios", "15.5") assert platform_obj == ["https://services.nvd.nist.gov/rest/json/cves/2.0?cpeName=cpe:2.3:o:cisco:ios:15.5:*"] + + +def test_os_platform_object_builder_with_unparseable_version(): + platform_obj = nist._os_platform_object_builder( + "cisco", + "ios", + "03.03.05SE", + ) + + assert platform_obj.vendor == "cisco" + assert platform_obj.os_type == "ios" + assert platform_obj.version_string == "03.03.05SE" + assert platform_obj.vendor_metadata is False + assert platform_obj.major is None + assert platform_obj.minor is None + assert platform_obj.patch is None