From c60cc24e47ae0c9532fa59676acabf8fbcba398f Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Mon, 20 Mar 2023 14:58:00 +0100 Subject: sectracker.parsers: make cvelist et al return a list of Bugs --- bin/grab-cve-in-fix | 2 +- bin/merge-cve-files | 12 ++---------- bin/remove-cve-dist-tags | 7 +------ bin/update-vuln | 2 +- lib/python/sectracker/analyzers.py | 2 +- lib/python/sectracker/parsers.py | 13 ++++++++++--- lib/python/sectracker_test/test_parsers.py | 17 ++++------------- 7 files changed, 20 insertions(+), 35 deletions(-) diff --git a/bin/grab-cve-in-fix b/bin/grab-cve-in-fix index ec65e776b7..20448a7215 100755 --- a/bin/grab-cve-in-fix +++ b/bin/grab-cve-in-fix @@ -85,7 +85,7 @@ class ParseChanges: def _read_cvelist(self): os.chdir(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) - data, _ = cvelist("data/CVE/list") # pylint: disable=no-value-for-parameter + data = cvelist("data/CVE/list") for cve in self.cves: for bug in data: if bug.header.name == cve: diff --git a/bin/merge-cve-files b/bin/merge-cve-files index 7ce47545b5..897eddabb4 100755 --- a/bin/merge-cve-files +++ b/bin/merge-cve-files @@ -105,14 +105,6 @@ def merge_annotations(annotations, new_annotation): return annotations -def parse_list(path): - data, messages = cvelist(path) - - for m in messages: - sys.stderr.write(str(m) + "\n") - - return data - if len(sys.argv) not in (2, 3): print(f"Usage: {os.path.basename(sys.argv[0])} (CVE/list) extra-cve-list") sys.exit(1) @@ -124,8 +116,8 @@ else: extra_list = sys.argv[-1] -data = parse_list(main_list) -extra_data = parse_list(extra_list) +data = cvelist(main_list) +extra_data = cvelist(extra_list) for extra_bug in extra_data: bug = next(bug for bug in data if bug.header.name == extra_bug.header.name) diff --git a/bin/remove-cve-dist-tags b/bin/remove-cve-dist-tags index 170505684b..8b06a12324 100755 --- a/bin/remove-cve-dist-tags +++ b/bin/remove-cve-dist-tags @@ -25,11 +25,6 @@ def keep_annotation(cve, annotation): return True -def parse_list(path): - data, messages = cvelist(path) - - return data - if len(sys.argv) <= 3: # assume there are no CVEs, so nothing to do sys.exit(0) @@ -46,7 +41,7 @@ for release in releases: if 'maincvefile' in distconfig: main_list = os.path.dirname(__file__) + '/../' + distconfig['maincvefile'] -data = parse_list(main_list) +data = cvelist(main_list) new_data = [] for cve in data: diff --git a/bin/update-vuln b/bin/update-vuln index 660d61b9d3..040bc6d47a 100755 --- a/bin/update-vuln +++ b/bin/update-vuln @@ -81,7 +81,7 @@ class ParseUpdates: def _read_cvelist(self): """Build a list of Bug items for the CVE from data/CVE/list""" os.chdir(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) - data, _ = cvelist("data/CVE/list") # pylint: disable=no-value-for-parameter + data = cvelist("data/CVE/list") for cve in self.cves: for bug in data: if bug.header.name == cve: diff --git a/lib/python/sectracker/analyzers.py b/lib/python/sectracker/analyzers.py index 7df09c4994..641227dd1a 100644 --- a/lib/python/sectracker/analyzers.py +++ b/lib/python/sectracker/analyzers.py @@ -30,7 +30,7 @@ def mergelists(listfiles, diag): in diag.""" result = {} for listfile in listfiles: - for bug in listfile.list: + for bug in listfile: header = bug.header name = header.name if name in result: diff --git a/lib/python/sectracker/parsers.py b/lib/python/sectracker/parsers.py index 2338565548..6b42d4a417 100644 --- a/lib/python/sectracker/parsers.py +++ b/lib/python/sectracker/parsers.py @@ -21,6 +21,7 @@ from dataclasses import dataclass import typing import traceback import re +import sys from sys import intern import debian_support @@ -31,6 +32,8 @@ import sectracker.diagnostics FORMAT = "5" +_debug_enabled = False + def _sortedtuple(seq): l = list(seq) l.sort() @@ -220,8 +223,6 @@ def _annotationdispatcher(): default=lambda text, diag: diag.error("invalid annotation")) _annotationdispatcher = _annotationdispatcher() -List = _namedtuple("List", "list messages") - @dataclass class Header: line: int @@ -287,7 +288,13 @@ def _parselist(path, f, parseheader, finish): if header is not None: bugs.append(finish(header, headerlineno, anns, diag)) - return List(tuple(bugs), diag.messages()) + + if _debug_enabled: + for m in diag.messages(): + sys.stderr.write(str(m) + "\n") + print("%s:%d: %s: %s" % (m.file, m.line, m.level, m.message)) + + return bugs @_xpickle.loader("CVE" + FORMAT) def cvelist(path, f): diff --git a/lib/python/sectracker_test/test_parsers.py b/lib/python/sectracker_test/test_parsers.py index 132b4e30e9..4c724ebced 100644 --- a/lib/python/sectracker_test/test_parsers.py +++ b/lib/python/sectracker_test/test_parsers.py @@ -25,25 +25,16 @@ assert "bash" in o assert o["bash"].name == "bash" assert "bash" in o["bash"].binary -safeunlink("../../data/CVE/list" + EXTENSION) -o = cvelist("../../data/CVE/list") -for err in o.messages: - print("%s:%d: %s: %s" % (err.file, err.line, err.level, err.message)) +p._debug_enabled = True safeunlink("../../data/DSA/list" + EXTENSION) -o = dsalist("../../data/DSA/list") -for err in o.messages: - print("%s:%d: %s: %s" % (err.file, err.line, err.level, err.message)) +dsalist("../../data/DSA/list") safeunlink("../../data/DTSA/list" + EXTENSION) -o = dtsalist("../../data/DTSA/list") -for err in o.messages: - print("%s:%d: %s: %s" % (err.file, err.line, err.level, err.message)) +dtsalist("../../data/DTSA/list") safeunlink("../../data/DLA/list" + EXTENSION) -o = dlalist("../../data/DLA/list") -for err in o.messages: - print("%s:%d: %s: %s" % (err.file, err.line, err.level, err.message)) +dlalist("../../data/DLA/list") Message = sectracker.diagnostics.Message for (line, res, xmsgs) in [ -- cgit v1.2.3