Skip to content

Commit 313a835

Browse files
authored
Merge pull request #2295 from aboutcode-org/2294-clean-empty-vers
fix: add migration to clean VERS with no constraints
2 parents 4f6283f + 7acc2a9 commit 313a835

3 files changed

Lines changed: 117 additions & 0 deletions

File tree

docs/source/conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml",
4242
"http://ftp.suse.com/pub/projects/security/yaml/",
4343
r"https://nixos\.wiki/", # NixOS wiki blocks CI bots with 403
44+
"https://usn.ubuntu.com/usn-db/database-all.json.bz2",
4445
]
4546

4647
# Add any Sphinx extension module names here, as strings. They can be
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 5.2.11 on 2026-05-01 10:38
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0124_advisoryv2_remove_malformed_aliases_and_dvisory_id"),
10+
]
11+
12+
def clean_empty_vers_range(apps, _):
13+
ImpactedPackage = apps.get_model("vulnerabilities", "ImpactedPackage")
14+
15+
ImpactedPackage.objects.filter(affecting_vers__regex=r"vers:[^/]+/$").update(
16+
affecting_vers=None
17+
)
18+
ImpactedPackage.objects.filter(fixed_vers__regex=r"vers:[^/]+/$").update(fixed_vers=None)
19+
20+
ImpactedPackage.objects.filter(
21+
affecting_vers__isnull=True,
22+
fixed_vers__isnull=True,
23+
introduced_by_package_commit_patches__isnull=True,
24+
fixed_by_package_commit_patches__isnull=True,
25+
).distinct().delete()
26+
27+
operations = [
28+
migrations.RunPython(clean_empty_vers_range, reverse_code=migrations.RunPython.noop),
29+
]

vulnerabilities/tests/test_data_migrations.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,3 +1184,90 @@ def test_migration_processes_malformed_aliases(self):
11841184
else:
11851185
assert adv_exists == False
11861186
assert alias_exists == False
1187+
1188+
1189+
class TestCleanVersRangeMigration(TestMigrations):
1190+
app_name = "vulnerabilities"
1191+
migrate_from = "0124_advisoryv2_remove_malformed_aliases_and_dvisory_id"
1192+
migrate_to = "0125_clean_vers_range_without_constraints"
1193+
1194+
def setUpBeforeMigration(self, apps):
1195+
AdvisoryV2 = apps.get_model("vulnerabilities", "AdvisoryV2")
1196+
ImpactedPackage = apps.get_model("vulnerabilities", "ImpactedPackage")
1197+
PackageCommitPatch = apps.get_model("vulnerabilities", "PackageCommitPatch")
1198+
1199+
self.advisory1 = AdvisoryV2.objects.create(
1200+
unique_content_id="content_id_old",
1201+
url="https://old.example.com",
1202+
summary="Old advisory",
1203+
advisory_id="test_adv1",
1204+
avid="test_pipeline/test_adv",
1205+
datasource_id="test_pipeline",
1206+
)
1207+
1208+
self.advisory2 = AdvisoryV2.objects.create(
1209+
unique_content_id="content_id_old2",
1210+
url="https://old.example.com",
1211+
summary="Old 2 advisory",
1212+
advisory_id="test_adv2",
1213+
avid="test_pipeline/test_adv",
1214+
datasource_id="test_pipeline",
1215+
)
1216+
1217+
ImpactedPackage.objects.create(
1218+
advisory=self.advisory1,
1219+
base_purl="pkg:npm/foobar0",
1220+
affecting_vers="vers:npm/",
1221+
fixed_vers="vers:npm/",
1222+
)
1223+
1224+
self.impact1 = ImpactedPackage.objects.create(
1225+
advisory=self.advisory1,
1226+
base_purl="pkg:npm/foobar1",
1227+
affecting_vers="vers:npm/>=5.3.1|<6.0.0",
1228+
fixed_vers="vers:npm/",
1229+
)
1230+
1231+
self.impact2 = ImpactedPackage.objects.create(
1232+
advisory=self.advisory1,
1233+
base_purl="pkg:npm/foobar2",
1234+
affecting_vers="vers:npm/",
1235+
fixed_vers="vers:npm/",
1236+
)
1237+
1238+
self.pkg_commit_patch1 = PackageCommitPatch.objects.create(
1239+
commit_hash="8c001a11dbcb3eb6d851e18f4cefa080af5fb398",
1240+
vcs_url="https://github.com/aboutcode-org/test1/",
1241+
patch_text="test1",
1242+
)
1243+
1244+
self.impact3 = ImpactedPackage.objects.create(
1245+
advisory=self.advisory2,
1246+
base_purl="pkg:npm/foobar3",
1247+
affecting_vers="vers:npm/>5.6.7",
1248+
fixed_vers="vers:npm/5.6.8",
1249+
)
1250+
1251+
self.impact2.fixed_by_package_commit_patches.add(self.pkg_commit_patch1)
1252+
1253+
self.assertEqual(ImpactedPackage.objects.count(), 4)
1254+
1255+
def test_empty_impactepackages_removed(self):
1256+
ImpactedPackage = apps.get_model("vulnerabilities", "ImpactedPackage")
1257+
1258+
self.assertEqual(ImpactedPackage.objects.count(), 3)
1259+
1260+
def test_empty_fixed_vers_cleaned(self):
1261+
self.impact1.refresh_from_db()
1262+
self.assertEqual(self.impact1.fixed_vers, None)
1263+
1264+
def test_empty_affecting_vers_cleaned(self):
1265+
self.impact2.refresh_from_db()
1266+
self.assertEqual(self.impact2.affecting_vers, None)
1267+
self.assertEqual(self.impact2.fixed_vers, None)
1268+
1269+
def test_no_change_to_valid_vers(self):
1270+
self.impact3.refresh_from_db()
1271+
self.assertEqual(self.impact3.affecting_vers, "vers:npm/>5.6.7")
1272+
self.assertEqual(self.impact3.fixed_vers, "vers:npm/5.6.8")
1273+
self.assertEqual(self.impact3.advisory.advisory_id, "test_adv2")

0 commit comments

Comments
 (0)