Skip to content

Commit e48d2ad

Browse files
author
Prabhu Subramanian
committed
Bug fixes
1 parent dabad65 commit e48d2ad

File tree

5 files changed

+33
-24
lines changed

5 files changed

+33
-24
lines changed

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="appthreat-vulnerability-db",
8-
version="1.6.10",
8+
version="1.6.11",
99
author="Team AppThreat",
1010
author_email="[email protected]",
1111
description="AppThreat's vulnerability database and package search library with a built-in file based storage. CVE, GitHub, npm are the primary sources of vulnerabilities.",

vdb/lib/db.py

+2
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ def _key_func(data, match_list):
128128
max_affected_version_including = data.details.max_affected_version_including
129129
min_affected_version_excluding = data.details.min_affected_version_excluding
130130
max_affected_version_excluding = data.details.max_affected_version_excluding
131+
if not cpe_uri:
132+
return False
131133
vendor, _, _ = parse_cpe(cpe_uri)
132134
for match in match_list:
133135
name_ver = match.split("|")

vdb/lib/nvd.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def convert_vuln(vuln):
135135
# Issue 12 - Ignore disputed vulnerabilities
136136
if "** DISPUTED **" in description:
137137
return None
138-
rdata = vuln["cve"]["references"]["reference_data"]
138+
rdata = vuln.get("cve", {}).get("references", {}).get("reference_data", [])
139139
related_urls = [r["url"] for r in rdata]
140140
if "baseMetricV3" in vuln["impact"]:
141141
cvss_data = vuln["impact"]["baseMetricV3"]["cvssV3"]
@@ -193,7 +193,9 @@ def convert_vuln_detail(vuln):
193193
fix_cpe_uri = None
194194
for cpe in cpe_list:
195195
detail = {}
196-
if cpe["vulnerable"]:
196+
if not cpe.get("cpe23Uri"):
197+
continue
198+
if cpe["vulnerable"] and cpe.get("cpe23Uri"):
197199
detail["cpe_uri"] = cpe["cpe23Uri"]
198200
detail["min_affected_version_including"] = cpe.get(
199201
"versionStartIncluding"
@@ -209,7 +211,7 @@ def convert_vuln_detail(vuln):
209211
)
210212
detail["source_update_time"] = vuln["lastModifiedDate"]
211213
cpe_details_list.append(detail)
212-
else: # cpe is not vulnerable
214+
else: # cpe is not vulnerable
213215
if node["operator"] == "OR":
214216
fix_cpe_uri = cpe["cpe23Uri"]
215217
# Add fix version details

vdb/lib/storage.py

+21-19
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,27 @@ def store(datas, db_file=config.vdb_bin_file, index_file=config.vdb_bin_index):
1717
data_list = serialize_vuln_list(datas)
1818
index_list = []
1919
for data in data_list:
20-
vendor, _, _ = parse_cpe(data["details"]["cpe_uri"])
21-
index_list.append(
22-
{
23-
"vendor": vendor.lower(),
24-
"name": data["details"]["package"].lower(),
25-
"min_affected_version_including": data["details"].get(
26-
"min_affected_version_including"
27-
),
28-
"max_affected_version_including": data["details"].get(
29-
"max_affected_version_including"
30-
),
31-
"min_affected_version_excluding": data["details"].get(
32-
"min_affected_version_excluding"
33-
),
34-
"max_affected_version_excluding": data["details"].get(
35-
"max_affected_version_excluding"
36-
),
37-
}
38-
)
20+
if data["details"]["cpe_uri"]:
21+
vendor, _, _ = parse_cpe(data["details"]["cpe_uri"])
22+
if vendor:
23+
index_list.append(
24+
{
25+
"vendor": vendor.lower(),
26+
"name": data["details"]["package"].lower(),
27+
"min_affected_version_including": data["details"].get(
28+
"min_affected_version_including"
29+
),
30+
"max_affected_version_including": data["details"].get(
31+
"max_affected_version_including"
32+
),
33+
"min_affected_version_excluding": data["details"].get(
34+
"min_affected_version_excluding"
35+
),
36+
"max_affected_version_excluding": data["details"].get(
37+
"max_affected_version_excluding"
38+
),
39+
}
40+
)
3941
packed_obj = msgpack.packb(data_list, use_bin_type=True)
4042
with open(db_file, mode="ab") as fp:
4143
fp.write(packed_obj)

vdb/lib/utils.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,10 @@ def parse_cpe(cpe_uri):
501501
:return: Individual parts
502502
"""
503503
parts = CPE_REGEX.match(cpe_uri)
504-
return parts.group("vendor"), parts.group("package"), parts.group("version")
504+
if parts:
505+
return parts.group("vendor"), parts.group("package"), parts.group("version")
506+
else:
507+
return "", None, None
505508

506509

507510
def get_default_cve_data(severity):

0 commit comments

Comments
 (0)