Skip to content

Commit 0290bf0

Browse files
authored
Merge pull request #1256 from TG1999/fix_cwe_view_problem
Remove weaknesses from view which are not in DB
2 parents 4faae54 + ef7bbb4 commit 0290bf0

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

CHANGELOG.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ Release notes
22
=============
33

44

5+
Next Release
6+
------------
7+
8+
- We filtered out the weakness that are not presented in the
9+
cwe2.database before passing them into the vulnerability details view.
10+
11+
512
Version v33.2.0
613
-----------------
714

vulnerabilities/models.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,17 +275,26 @@ 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+
278289
@property
279290
def name(self):
280291
"""Return the weakness's name."""
281-
weakness = self.db.get(self.cwe_id)
282-
return weakness.name
292+
return self.weakness.name if self.weakness else ""
283293

284294
@property
285295
def description(self):
286296
"""Return the weakness's description."""
287-
weakness = self.db.get(self.cwe_id)
288-
return weakness.description
297+
return self.weakness.description if self.weakness else ""
289298

290299

291300
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: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ 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 = [
121+
weakness_object for weakness_object in weaknesses if weakness_object.weakness
122+
]
119123
context.update(
120124
{
121125
"vulnerability": self.object,
@@ -125,7 +129,7 @@ def get_context_data(self, **kwargs):
125129
"aliases": self.object.aliases.all(),
126130
"affected_packages": self.object.affected_packages.all(),
127131
"fixed_by_packages": self.object.fixed_by_packages.all(),
128-
"weaknesses": self.object.weaknesses.all(),
132+
"weaknesses": weaknesses_present_in_db,
129133
}
130134
)
131135
return context

0 commit comments

Comments
 (0)