Skip to content

Commit 2df98f5

Browse files
committed
Remove weaknesses from view which are not in DB
Signed-off-by: Tushar Goel <[email protected]>
1 parent 4faae54 commit 2df98f5

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

vulnerabilities/models.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,17 +275,27 @@ class Weakness(models.Model):
275275
vulnerabilities = models.ManyToManyField(Vulnerability, related_name="weaknesses")
276276
db = Database()
277277

278+
@property
279+
def weakness(self):
280+
"""
281+
Return a queryset of Weakness for this vulnerability.
282+
"""
283+
try:
284+
weakness = self.db.get(self.cwe_id)
285+
return weakness
286+
except Exception as e:
287+
logger.warning(f"Could not find CWE {self.cwe_id}: {e}")
288+
return None
289+
278290
@property
279291
def name(self):
280292
"""Return the weakness's name."""
281-
weakness = self.db.get(self.cwe_id)
282-
return weakness.name
293+
return self.weakness.name if self.weakness else ""
283294

284295
@property
285296
def description(self):
286297
"""Return the weakness's description."""
287-
weakness = self.db.get(self.cwe_id)
288-
return weakness.description
298+
return self.weakness.description if self.weakness else ""
289299

290300

291301
class VulnerabilityReferenceQuerySet(BaseQuerySet):

vulnerabilities/tests/test_models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,9 @@ def test_vulnerability_package(self):
8888

8989
assert v1.vulnerable_packages.all()[0] == p1
9090
assert v1.patched_packages.all()[0] == p2
91+
92+
def test_cwe_not_present_in_weaknesses_db(self):
93+
w1 = models.Weakness.objects.create(name="189")
94+
assert w1.weakness is None
95+
assert w1.name is ""
96+
assert w1.description is ""

vulnerabilities/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ def get_queryset(self):
116116

117117
def get_context_data(self, **kwargs):
118118
context = super().get_context_data(**kwargs)
119+
weaknesses = self.object.weaknesses.all()
120+
weaknesses_present_in_db = [weakness for weakness in weaknesses if weakness.weakness]
119121
context.update(
120122
{
121123
"vulnerability": self.object,
@@ -125,7 +127,7 @@ def get_context_data(self, **kwargs):
125127
"aliases": self.object.aliases.all(),
126128
"affected_packages": self.object.affected_packages.all(),
127129
"fixed_by_packages": self.object.fixed_by_packages.all(),
128-
"weaknesses": self.object.weaknesses.all(),
130+
"weaknesses": weaknesses_present_in_db,
129131
}
130132
)
131133
return context

0 commit comments

Comments
 (0)