Skip to content
Merged
26 changes: 26 additions & 0 deletions cve_bin_tool/parsers/perl.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,40 @@
# Copyright (C) 2022 Intel Corporation
# SPDX-License-Identifier: GPL-3.0-or-later
"""Python script containing all functionalities related to parsing of perl's cpan files."""
import re

from cve_bin_tool.parsers import Parser


class PerlParser(Parser):
"""Parser for perl's cpan files"""

def __init__(self, cve_db, logger):
super().__init__(cve_db, logger)
self.purl_pkg_type = "cpan"

def generate_purl(self, product, version, vendor, qualifier={}, subpath=None):
"""Generates PURL after normalizing all components."""
# Normalize product, version, and vendor for Perl packages
product = re.sub(r"[^a-zA-Z0-9._-]", "", product).lower()
version = re.sub(r"[^a-zA-Z0-9.+-]", "", version)
vendor = "UNKNOWN" # Typically, the vendor is not explicitly defined for CPAN packages

if not product or not version:
return None

purl = super().generate_purl(
product,
version,
vendor,
qualifier,
subpath,
)

return purl

def run_checker(self, filename):
"""Process cpan file and extract dependency details"""
self.filename = filename
with open(self.filename) as fh:
data = fh.readlines()
Expand Down