diff --git a/cyclonedx/model/vulnerability.py b/cyclonedx/model/vulnerability.py index 5f3bf024..1fc23673 100644 --- a/cyclonedx/model/vulnerability.py +++ b/cyclonedx/model/vulnerability.py @@ -36,14 +36,6 @@ from enum import Enum from typing import Any, Optional, Union -if sys.version_info >= (3, 13): - from warnings import deprecated -else: - from typing_extensions import deprecated - -import py_serializable as serializable -from sortedcontainers import SortedSet - from .._internal.bom_ref import bom_ref_from_str as _bom_ref_from_str from .._internal.compare import ComparableTuple as _ComparableTuple from ..exception.model import MutuallyExclusivePropertiesException, NoPropertiesProvidedException @@ -59,6 +51,19 @@ ) from .tool import Tool, ToolRepository, _ToolRepositoryHelper +if sys.version_info >= (3, 13): + from warnings import deprecated +else: + from typing_extensions import deprecated + +import py_serializable as serializable +from sortedcontainers import SortedSet + +_RE_CVSS_V4 = re.compile(r'^CVSS:4\.\d/?') +_RE_CVSS_V3 = re.compile(r'^CVSS:3\.\d/?') +_RE_CVSS_V2 = re.compile(r'^CVSS:2\.\d/?') +_RE_OWASP = re.compile(r'^OWASP/?') + @serializable.serializable_class(ignore_unknown_during_deserialization=True) class BomTargetVersionRange: @@ -643,15 +648,15 @@ def get_localised_vector(self, vector: str) -> str: The vector without any scheme prefix as a `str`. """ if self is VulnerabilityScoreSource.CVSS_V4 and vector.startswith('CVSS:4.'): - return re.sub(r'^CVSS:4\.\d/?', '', vector) + return _RE_CVSS_V4.sub('', vector) if ( self in (VulnerabilityScoreSource.CVSS_V3_1, VulnerabilityScoreSource.CVSS_V3) ) and vector.startswith('CVSS:3.'): - return re.sub(r'^CVSS:3\.\d/?', '', vector) + return _RE_CVSS_V3.sub('', vector) if self is VulnerabilityScoreSource.CVSS_V2 and vector.startswith('CVSS:2.'): - return re.sub(r'^CVSS:2\.\d/?', '', vector) + return _RE_CVSS_V2.sub('', vector) if self is VulnerabilityScoreSource.OWASP and vector.startswith('OWASP'): - return re.sub(r'^OWASP/?', '', vector) + return _RE_OWASP.sub('', vector) return vector def get_value_pre_1_4(self) -> str: