MCPcopy Create free account
hub / github.com/aboutcode-org/vulnerablecode / categorize_versions

Function categorize_versions

vulnerabilities/importers/rust.py:137–179  ·  view source on GitHub ↗

Categorize all versions of a crate according to the given version ranges. :return: unaffected versions, affected versions

(
    all_versions: Set[str],
    unaffected_version_ranges: List[VersionRange],
    affected_version_ranges: List[VersionRange],
    resolved_version_ranges: List[VersionRange],
)

Source from the content-addressed store, hash-verified

135
136
137def categorize_versions(
138 all_versions: Set[str],
139 unaffected_version_ranges: List[VersionRange],
140 affected_version_ranges: List[VersionRange],
141 resolved_version_ranges: List[VersionRange],
142) -> Tuple[Set[str], Set[str]]:
143 """
144 Categorize all versions of a crate according to the given version ranges.
145
146 :return: unaffected versions, affected versions
147 """
148
149 unaffected, affected = set(), set()
150
151 if (
152 not unaffected_version_ranges
153 and not affected_version_ranges
154 and not resolved_version_ranges
155 ):
156 return unaffected, affected
157
158 # TODO: This is probably wrong
159 for version in all_versions:
160 version_obj = SemverVersion(version)
161 if affected_version_ranges and all([version_obj in av for av in affected_version_ranges]):
162 affected.add(version)
163 elif unaffected_version_ranges and all(
164 [version_obj in av for av in unaffected_version_ranges]
165 ):
166 unaffected.add(version)
167 elif resolved_version_ranges and all([version_obj in av for av in resolved_version_ranges]):
168 unaffected.add(version)
169
170 # If some versions were not classified above, one or more of the given ranges might be empty, so
171 # the remaining versions default to either affected or unaffected.
172 uncategorized_versions = all_versions - unaffected.union(affected)
173 if uncategorized_versions:
174 if not affected_version_ranges:
175 affected.update(uncategorized_versions)
176 else:
177 unaffected.update(uncategorized_versions)
178
179 return unaffected, affected
180
181
182def get_toml_lines(lines):

Calls 1

addMethod · 0.80