Skip to content

Commit 53d9627

Browse files
committed
Compute content_id from all fields of AdvisoryV2
Resolves: #2186 Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 2ff2906 commit 53d9627

File tree

1 file changed

+19
-40
lines changed

1 file changed

+19
-40
lines changed

vulnerabilities/utils.py

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -666,53 +666,32 @@ def compute_content_id_v2(advisory_data):
666666
"""
667667
Compute a unique content_id for an advisory by normalizing its data and hashing it.
668668
669-
:param advisory_data: An AdvisoryData object
669+
:param advisory_data: An AdvisoryDataV2 or AdvisoryV2 object
670670
:return: SHA-256 hash digest as content_id
671671
"""
672-
673-
# Normalize fields
674672
from vulnerabilities.importer import AdvisoryDataV2
675673
from vulnerabilities.models import AdvisoryV2
676674

677-
if isinstance(advisory_data, AdvisoryV2):
678-
normalized_data = {
679-
"aliases": normalize_list(advisory_data.aliases),
680-
"summary": normalize_text(advisory_data.summary),
681-
"impacted_packages": sorted(
682-
[impact.to_dict() for impact in advisory_data.impacted_packages.all()],
683-
key=lambda x: json.dumps(x, sort_keys=True),
684-
),
685-
"patches": sorted(
686-
[patch.to_patch_data().to_dict() for patch in advisory_data.patches.all()],
687-
key=lambda x: json.dumps(x, sort_keys=True),
688-
),
689-
"references": [ref for ref in normalize_list(advisory_data.references) if ref],
690-
"weaknesses": normalize_list(advisory_data.weaknesses),
691-
}
692-
normalized_data["url"] = advisory_data.url
693-
694-
elif isinstance(advisory_data, AdvisoryDataV2):
695-
normalized_data = {
696-
"advisory_id": normalize_text(advisory_data.advisory_id),
697-
"aliases": normalize_list(advisory_data.aliases),
698-
"summary": normalize_text(advisory_data.summary),
699-
"affected_packages": [
700-
pkg.to_dict() for pkg in normalize_list(advisory_data.affected_packages) if pkg
701-
],
702-
"references": [
703-
ref.to_dict() for ref in normalize_list(advisory_data.references) if ref
704-
],
705-
"severities": [
706-
sev.to_dict() for sev in normalize_list(advisory_data.severities) if sev
707-
],
708-
"weaknesses": normalize_list(advisory_data.weaknesses),
709-
"patches": [patch.to_dict() for patch in normalize_list(advisory_data.patches)],
710-
}
711-
normalized_data["url"] = advisory_data.url
712-
713-
else:
675+
if not isinstance(advisory_data, (AdvisoryV2, AdvisoryDataV2)):
714676
raise ValueError("Unsupported advisory data type for content ID computation")
715677

678+
if isinstance(advisory_data, AdvisoryV2):
679+
advisory_data = advisory_data.to_advisory_data()
680+
681+
normalized_data = {
682+
"advisory_id": normalize_text(advisory_data.advisory_id),
683+
"aliases": normalize_list(advisory_data.aliases),
684+
"summary": normalize_text(advisory_data.summary),
685+
"affected_packages": [
686+
pkg.to_dict() for pkg in normalize_list(advisory_data.affected_packages) if pkg
687+
],
688+
"references": [ref.to_dict() for ref in normalize_list(advisory_data.references) if ref],
689+
"severities": [sev.to_dict() for sev in normalize_list(advisory_data.severities) if sev],
690+
"weaknesses": normalize_list(advisory_data.weaknesses),
691+
"patches": [patch.to_dict() for patch in normalize_list(advisory_data.patches)],
692+
}
693+
normalized_data["url"] = advisory_data.url
694+
716695
normalized_json = json.dumps(normalized_data, separators=(",", ":"), sort_keys=True)
717696
content_id = hashlib.sha256(normalized_json.encode("utf-8")).hexdigest()
718697

0 commit comments

Comments
 (0)