Skip to content

Commit d9649d6

Browse files
committed
fix: handle disabled_sources in get_vendor_product_pairs
get_vendor_product_pairs function doesn't handle disabled sources passed by the user. As a result, the user can't disable a datasource (e.g., OSV) when parsing a python PKG-INFO file. Fix this by passing enabled_sources from cli to version_scanner and then to cvedb. To achieve this functionality, source_nvd must also be added to enabled_sources when appropriate. Signed-off-by: Fabrice Fontaine <[email protected]>
1 parent 8cf72df commit d9649d6

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

cve_bin_tool/cli.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,7 @@ def main(argv=None):
734734
nvd_api_key=args["nvd_api_key"],
735735
error_mode=error_mode,
736736
)
737+
enabled_sources.append(source_nvd)
737738
default_sources = [source_nvd]
738739
default_sources.extend(enabled_sources)
739740
else:
@@ -1024,6 +1025,7 @@ def main(argv=None):
10241025
exclude_folders=args["exclude"],
10251026
error_mode=error_mode,
10261027
validate=not args["disable_validation_check"],
1028+
sources=enabled_sources,
10271029
)
10281030
version_scanner.remove_skiplist(skips)
10291031
LOGGER.info(f"Number of checkers: {version_scanner.number_of_checkers()}")

cve_bin_tool/cvedb.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -679,12 +679,15 @@ def get_vendor_product_pairs(self, package_names) -> list[dict[str, str]]:
679679
vendor_package_pairs = []
680680
query = """
681681
SELECT DISTINCT vendor FROM cve_range
682-
WHERE product=?
683-
"""
682+
WHERE product=? AND data_source IN (%s)
683+
""" % ",".join(
684+
"?" for i in self.sources
685+
)
684686

687+
data_sources = list(map(lambda x: x.source_name, self.sources))
685688
# For python package checkers we don't need the progress bar running
686689
if type(package_names) is not list:
687-
cursor.execute(query, [package_names])
690+
cursor.execute(query, [package_names] + data_sources)
688691
vendors = list(map(lambda x: x[0], cursor.fetchall()))
689692

690693
for vendor in vendors:
@@ -703,7 +706,7 @@ def get_vendor_product_pairs(self, package_names) -> list[dict[str, str]]:
703706
for package_name in track(
704707
package_names, description="Processing the given list...."
705708
):
706-
cursor.execute(query, [package_name["name"].lower()])
709+
cursor.execute(query, [package_name["name"].lower()] + data_sources)
707710
vendors = list(map(lambda x: x[0], cursor.fetchall()))
708711
for vendor in vendors:
709712
if vendor != "":

cve_bin_tool/version_scanner.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def __init__(
5454
error_mode: ErrorMode = ErrorMode.TruncTrace,
5555
score: int = 0,
5656
validate: bool = True,
57+
sources=None,
5758
):
5859
self.logger = logger or LOGGER.getChild(self.__class__.__name__)
5960
# Update egg if installed in development mode
@@ -76,7 +77,7 @@ def __init__(
7677
self.should_extract = should_extract
7778
self.file_stack: list[str] = []
7879
self.error_mode = error_mode
79-
self.cve_db = CVEDB()
80+
self.cve_db = CVEDB(sources=sources)
8081
self.validate = validate
8182
# self.logger.info("Checkers loaded: %s" % (", ".join(self.checkers.keys())))
8283
self.language_checkers = self.available_language_checkers()

0 commit comments

Comments
 (0)