Skip to content

Commit bcfceae

Browse files
committed
feat: add detailed flag
1 parent e3d5602 commit bcfceae

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

cve_bin_tool/cli.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@ def main(argv=None):
252252
help="operate in offline mode",
253253
default=False,
254254
)
255+
parser.add_argument(
256+
"--detailed", action="store_true", help="display detailed report", default=False
257+
)
255258

256259
merge_report_group = parser.add_argument_group(
257260
"Merge Report", "Arguments related to Intermediate and Merged Reports"
@@ -602,6 +605,7 @@ def main(argv=None):
602605
append=args["append"],
603606
merge_report=merged_reports,
604607
affected_versions=args["affected_versions"],
608+
detailed=args["detailed"],
605609
)
606610

607611
if not args["quiet"]:

cve_bin_tool/output_engine/__init__.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
)
2828

2929

30-
def output_json(all_cve_data: Dict[ProductInfo, CVEData], outfile: IO):
30+
def output_json(all_cve_data: Dict[ProductInfo, CVEData], outfile: IO, detailed: bool):
3131
"""Output a JSON of CVEs"""
32-
formatted_output = format_output(all_cve_data)
32+
formatted_output = format_output(all_cve_data, detailed)
3333
json.dump(formatted_output, outfile, indent=" ")
3434

3535

@@ -56,9 +56,9 @@ def save_intermediate(
5656
json.dump(inter_output, f, indent=" ")
5757

5858

59-
def output_csv(all_cve_data: Dict[ProductInfo, CVEData], outfile):
59+
def output_csv(all_cve_data: Dict[ProductInfo, CVEData], outfile, detailed: bool):
6060
"""Output a CSV of CVEs"""
61-
formatted_output = format_output(all_cve_data)
61+
formatted_output = format_output(all_cve_data, detailed)
6262
writer = csv.DictWriter(
6363
outfile,
6464
fieldnames=[
@@ -75,6 +75,8 @@ def output_csv(all_cve_data: Dict[ProductInfo, CVEData], outfile):
7575
"comments",
7676
],
7777
)
78+
if detailed:
79+
writer.fieldnames.append("description")
7880
writer.writeheader()
7981
writer.writerows(formatted_output)
8082

@@ -305,6 +307,7 @@ def __init__(
305307
merge_report: Union[None, List[str]] = None,
306308
affected_versions: int = 0,
307309
all_cve_version_info=None,
310+
detailed: bool = False,
308311
):
309312
self.logger = logger or LOGGER.getChild(self.__class__.__name__)
310313
self.all_cve_version_info = all_cve_version_info
@@ -321,16 +324,17 @@ def __init__(
321324
self.merge_report = merge_report
322325
self.affected_versions = affected_versions
323326
self.all_cve_data = all_cve_data
327+
self.detailed = detailed
324328

325329
def output_cves(self, outfile, output_type="console"):
326330
"""Output a list of CVEs
327331
format self.checkers[checker_name][version] = dict{id: severity}
328332
to other formats like CSV or JSON
329333
"""
330334
if output_type == "json":
331-
output_json(self.all_cve_data, outfile)
335+
output_json(self.all_cve_data, outfile, self.detailed)
332336
elif output_type == "csv":
333-
output_csv(self.all_cve_data, outfile)
337+
output_csv(self.all_cve_data, outfile, self.detailed)
334338
elif output_type == "pdf":
335339
output_pdf(
336340
self.all_cve_data,

cve_bin_tool/output_engine/util.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ def generate_filename(extension: str, prefix: str = "output") -> str:
5151
return filename
5252

5353

54-
def format_output(all_cve_data: Dict[ProductInfo, CVEData]) -> List[Dict[str, str]]:
54+
def format_output(
55+
all_cve_data: Dict[ProductInfo, CVEData], detailed: bool
56+
) -> List[Dict[str, str]]:
5557
"""
5658
summary: format output in the list of dictionary format.
5759
@@ -76,21 +78,22 @@ def format_output(all_cve_data: Dict[ProductInfo, CVEData]) -> List[Dict[str, st
7678
formatted_output = []
7779
for product_info, cve_data in all_cve_data.items():
7880
for cve in cve_data["cves"]:
79-
formatted_output.append(
80-
{
81-
"vendor": product_info.vendor,
82-
"product": product_info.product,
83-
"version": product_info.version,
84-
"cve_number": cve.cve_number,
85-
"severity": cve.severity,
86-
"score": str(cve.score),
87-
"cvss_version": str(cve.cvss_version),
88-
"cvss_vector": cve.cvss_vector,
89-
"paths": ", ".join(cve_data["paths"]),
90-
"remarks": cve.remarks.name,
91-
"comments": cve.comments,
92-
}
93-
)
81+
details = {
82+
"vendor": product_info.vendor,
83+
"product": product_info.product,
84+
"version": product_info.version,
85+
"cve_number": cve.cve_number,
86+
"severity": cve.severity,
87+
"score": str(cve.score),
88+
"cvss_version": str(cve.cvss_version),
89+
"cvss_vector": cve.cvss_vector,
90+
"paths": ", ".join(cve_data["paths"]),
91+
"remarks": cve.remarks.name,
92+
"comments": cve.comments,
93+
}
94+
if detailed:
95+
details["description"] = cve.description
96+
formatted_output.append(details)
9497

9598
return formatted_output
9699

0 commit comments

Comments
 (0)