Skip to content

Commit 0d55b24

Browse files
authored
Merge pull request #1087 from TG1999/fix/1086
Add migrations to remove corrupted advisories #1086
2 parents 59fd972 + 6955e98 commit 0d55b24

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/nexB/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
from django.db import migrations
11+
12+
from vulnerabilities.severity_systems import SCORING_SYSTEMS
13+
14+
class Migration(migrations.Migration):
15+
16+
def remove_advisories(apps, schema_editor):
17+
Advisory = apps.get_model("vulnerabilities", "Advisory")
18+
deletables = []
19+
for advisory in Advisory.objects.iterator(chunk_size=1000):
20+
for ref in advisory.references:
21+
if not ref["url"]:
22+
deletables.append(advisory.pk)
23+
break
24+
for sev in ref["severities"]:
25+
if sev["system"] not in SCORING_SYSTEMS:
26+
deletables.append(advisory.pk)
27+
break
28+
Advisory.objects.filter(pk__in=deletables).delete()
29+
30+
dependencies = [
31+
("vulnerabilities", "0037_advisory_weaknesses_weakness"),
32+
]
33+
34+
operations = [
35+
migrations.RunPython(remove_advisories, reverse_code=migrations.RunPython.noop),
36+
]

vulnerabilities/tests/test_data_migrations.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,3 +533,38 @@ def test_merge_rows(self):
533533
]
534534

535535
assert severities == expected
536+
537+
538+
class RemoveCorrupteAdvisories(TestMigrations):
539+
app_name = "vulnerabilities"
540+
migrate_from = "0037_advisory_weaknesses_weakness"
541+
migrate_to = "0038_remove_corrupted_advisories_with_incorrect_refs_and_severity"
542+
543+
def setUpBeforeMigration(self, apps):
544+
# using get_model to avoid circular import
545+
Advisory = apps.get_model("vulnerabilities", "Advisory")
546+
547+
corrupted_advisory = Advisory.objects.create(
548+
aliases=["CVE-2020-1234"],
549+
summary="Corrupted advisory",
550+
references=[
551+
{
552+
"reference_id": "cpe:2.3:a:f5:nginx:1.16.1:*:*:*:*:*:*:*",
553+
"url": "",
554+
"severity": [
555+
{
556+
"scoring_system": "cvssv3_vector",
557+
"value": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
558+
}
559+
],
560+
}
561+
],
562+
date_collected="2020-01-01",
563+
date_published="2020-01-01",
564+
)
565+
corrupted_advisory.save()
566+
567+
def test_removal_of_corrupted_advisory(self):
568+
# using get_model to avoid circular import
569+
Advisory = self.apps.get_model("vulnerabilities", "Advisory")
570+
Advisory.objects.all().count() == 0

0 commit comments

Comments
 (0)