Skip to content

Commit f73308f

Browse files
author
Prabhu Subramanian
committed
Guard against bad CPE value
1 parent f40f09e commit f73308f

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
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.1",
8+
version="1.6.2",
99
author="Team AppThreat",
1010
author_email="cloud@appthreat.com",
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/__init__.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
# CPE Regex
1111
CPE_REGEX = re.compile(
12-
"cpe:?:[^:]+:[^:]+:(?P<vendor>[^:]+):(?P<package>[^:]+):(?P<version>[^:]+)"
12+
"cpe:?:[^:]+:[^:]+:(?P<vendor>[^:]+):(?P<package>[^:]+):(?P<version>[^:]+)?"
1313
)
1414

1515

@@ -142,17 +142,37 @@ def __init__(
142142
):
143143
parts = CPE_REGEX.match(cpe_uri)
144144
self.cpe_uri = cpe_uri
145-
self.package = package if package else parts.group("package")
146-
self.min_affected_version_including = (
147-
min_affected_version_including
148-
if min_affected_version_including
149-
else parts.group("version")
150-
)
151-
self.max_affected_version_including = (
152-
max_affected_version_including
153-
if max_affected_version_including
154-
else parts.group("version")
155-
)
145+
# Occasionally, NVD CPE value could be invalid. We need to guard against this
146+
if parts:
147+
self.package = package if package else parts.group("package")
148+
self.min_affected_version_including = (
149+
min_affected_version_including
150+
if min_affected_version_including
151+
else parts.group("version")
152+
)
153+
self.max_affected_version_including = (
154+
max_affected_version_including
155+
if max_affected_version_including
156+
else parts.group("version")
157+
)
158+
else:
159+
# Use split to extract the package name in case of bad CPE value
160+
package_workaround = ""
161+
if cpe_uri:
162+
cpe_parts = cpe_uri.split(":")
163+
if len(cpe_parts) > 4:
164+
package_workaround = cpe_parts[4]
165+
self.package = package if package else package_workaround
166+
self.min_affected_version_including = (
167+
min_affected_version_including
168+
if min_affected_version_including
169+
else "*"
170+
)
171+
self.max_affected_version_including = (
172+
max_affected_version_including
173+
if max_affected_version_including
174+
else "*"
175+
)
156176
self.min_affected_version_excluding = (
157177
min_affected_version_excluding if min_affected_version_excluding else None
158178
)

0 commit comments

Comments
 (0)