Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Version v39.0.0
- Increase frequency and priority for critical pipelines
- Add ALTCHA verification in UI
- Add API/ UI support for Patch/PackageCommitPatch
- Fix failing V2 pipelinea


Version v38.6.0
Expand Down
39 changes: 21 additions & 18 deletions vulnerabilities/pipelines/v2_improvers/collect_ssvc_trees.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,13 @@ def collect_ssvc_data(self):
advisory_map[alias.alias].add(adv)

existing_ssvc = {
s.source_advisory_id: s
(s.source_advisory_id, s.vector): s
for s in SSVC.objects.filter(source_advisory_id__in=[a.id for a in advisories])
}

self.log(f"Existing SSVC rows found: {len(existing_ssvc)}")
self.log(f"Advisories to process: {len(advisories)}")

to_create = []
to_update = []

Expand All @@ -99,7 +102,9 @@ def collect_ssvc_data(self):
if not (ssvc_tree and decision):
continue

existing = existing_ssvc.get(advisory.id)
key = (advisory.id, ssvc_vector)

existing = existing_ssvc.get(key)

if existing:
existing.options = ssvc_tree
Expand Down Expand Up @@ -131,33 +136,31 @@ def collect_ssvc_data(self):
)

# Refresh newly created IDs
created_ssvc = {
s.source_advisory_id: s
for s in SSVC.objects.filter(source_advisory_id__in=[a.id for a in advisories])
}
created_ssvc = defaultdict(list)

for s in SSVC.objects.filter(source_advisory_id__in=[a.id for a in advisories]):
created_ssvc[s.source_advisory_id].append(s)

through_model = SSVC.related_advisories.through

through_rows = []

for advisory in advisories:
ssvc_obj = created_ssvc.get(advisory.id)

if not ssvc_obj:
continue
ssvc_objs = created_ssvc.get(advisory.id, [])

related = advisory_map.get(advisory.advisory_id, set())

for related_adv in related:
if related_adv.id == advisory.id:
continue
for ssvc_obj in ssvc_objs:
for related_adv in related:
if related_adv.id == advisory.id:
continue

through_rows.append(
through_model(
ssvc_id=ssvc_obj.id,
advisoryv2_id=related_adv.id,
through_rows.append(
through_model(
ssvc_id=ssvc_obj.id,
advisoryv2_id=related_adv.id,
)
)
)

through_model.objects.bulk_create(
through_rows,
Expand Down
43 changes: 28 additions & 15 deletions vulnerabilities/pipes/apache_kafka.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,26 +48,39 @@ def parse_range(raw_range):
if not range:
continue
if "-" not in range:
parsed_range.append(
VersionConstraint(
comparator="=",
version=SemverVersion(range),
version = parse_exact_version(range)
if version:
parsed_range.append(
VersionConstraint(
comparator="=",
version=version,
)
)
)
continue

lhs, rhs = range.split("-")
parsed_range.append(
VersionConstraint(
comparator=">=",
version=SemverVersion(lhs.strip()),
lhs_version = parse_exact_version(lhs.strip())
rhs_version = parse_exact_version(rhs.strip())
if lhs_version:
parsed_range.append(
VersionConstraint(
comparator=">=",
version=lhs_version,
)
)
)
parsed_range.append(
VersionConstraint(
comparator="<=",
version=SemverVersion(rhs.strip()),
if rhs_version:
parsed_range.append(
VersionConstraint(
comparator="<=",
version=rhs_version,
)
)
)

return parsed_range


def parse_exact_version(version_str):
try:
return SemverVersion(version_str)
except Exception:
return None
Loading