Skip to content

Commit f32abcc

Browse files
committed
Use yaml_lines of file to extract data.
Signed-off-by: Tushar912 <tushar.912u@gmail.com>
1 parent 56819f4 commit f32abcc

1 file changed

Lines changed: 57 additions & 66 deletions

File tree

vulnerabilities/importers/istio.py

Lines changed: 57 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import asyncio
2424
from typing import List, Set
25+
import yaml
2526

2627
from dephell_specifier import RangeSpecifier
2728
from packageurl import PackageURL
@@ -80,31 +81,27 @@ def get_versions_for_pkg_from_range_list(self, version_range_list):
8081
safe_pkg_versions = set(all_version_list) - set(vuln_pkg_versions)
8182
return safe_pkg_versions, vuln_pkg_versions
8283

83-
def get_data_from_md(self, file):
84-
data = {}
85-
for line in file:
84+
def get_data_from_yaml_lines(self, yaml_lines):
85+
86+
return yaml.safe_load("\n".join(yaml_lines))
87+
88+
def get_yaml_lines(self, lines):
89+
90+
for line in lines:
8691
line = line.strip()
87-
line = line.split()
88-
if len(line) > 0 and line is not None:
89-
90-
start = line[0]
91-
92-
if start == "title:":
93-
data["title"] = " ".join(line[1:])
94-
elif start == "description:":
95-
data["description"] = " ".join(line[1:])
96-
elif start == "cves:":
97-
data["cves"] = " ".join(line[1:])
98-
data["cves"] = data["cves"].replace("[", "")
99-
data["cves"] = data["cves"].replace("]", "")
100-
data["cves"] = data["cves"].split(",")
101-
102-
elif start == "releases:":
103-
data["releases"] = " ".join(line[1:])
104-
data["releases"] = data["releases"].replace("[", "")
105-
data["releases"] = data["releases"].replace("]", "")
106-
data["releases"] = data["releases"].replace('"', "")
107-
data["releases"] = data["releases"].split(",")
92+
if line.startswith("---"):
93+
continue
94+
elif line.endswith("---"):
95+
break
96+
else:
97+
yield line
98+
99+
def process_file(self, path):
100+
101+
advisories = []
102+
103+
data = self.get_data_from_md(path)
104+
108105
releases = []
109106
if data.get("releases"):
110107
for release in data["releases"]:
@@ -114,60 +111,54 @@ def get_data_from_md(self, file):
114111
lbound = ">=" + release[0]
115112
ubound = "<=" + release[2]
116113
releases.append(lbound + "," + ubound)
117-
data["releases"] = releases
118-
119-
return data
120114

121-
def process_file(self, path):
122-
123-
advisories = []
124-
125-
with open(path) as f:
126-
data = {}
127-
128-
data = self.get_data_from_md(f)
115+
data["releases"] = releases
129116

130-
if not data.get("cves"):
131-
data["cves"] = [""]
117+
if not data.get("cves"):
118+
data["cves"] = [""]
132119

133-
for cve_id in data["cves"]:
120+
for cve_id in data["cves"]:
134121

135-
if not cve_id.startswith("CVE"):
136-
continue
122+
if not cve_id.startswith("CVE"):
123+
continue
137124

138-
safe_pkg_versions = []
139-
vuln_pkg_versions = []
125+
safe_pkg_versions = []
126+
vuln_pkg_versions = []
140127

141-
if not data.get("releases"):
142-
data["releases"] = []
128+
if not data.get("releases"):
129+
data["releases"] = []
143130

144-
(
145-
safe_pkg_versions,
146-
vuln_pkg_versions,
147-
) = self.get_versions_for_pkg_from_range_list(data["releases"])
131+
safe_pkg_versions, vuln_pkg_versions = self.get_versions_for_pkg_from_range_list(
132+
data["releases"]
133+
)
148134

149-
safe_purls = []
150-
vuln_purls = []
135+
safe_purls = []
136+
vuln_purls = []
151137

152-
cve_id = cve_id
138+
cve_id = cve_id
153139

154-
safe_purls = {
155-
PackageURL(name="istio", type="golang", version=version)
156-
for version in safe_pkg_versions
157-
}
140+
safe_purls = {
141+
PackageURL(name="istio", type="golang", version=version)
142+
for version in safe_pkg_versions
143+
}
158144

159-
vuln_purls = {
160-
PackageURL(name="istio", type="golang", version=version)
161-
for version in vuln_pkg_versions
162-
}
145+
vuln_purls = {
146+
PackageURL(name="istio", type="golang", version=version)
147+
for version in vuln_pkg_versions
148+
}
163149

164-
advisories.append(
165-
Advisory(
166-
summary=data["description"],
167-
impacted_package_urls=vuln_purls,
168-
resolved_package_urls=safe_purls,
169-
cve_id=cve_id,
170-
)
150+
advisories.append(
151+
Advisory(
152+
summary=data["description"],
153+
impacted_package_urls=vuln_purls,
154+
resolved_package_urls=safe_purls,
155+
cve_id=cve_id,
171156
)
157+
)
172158

173159
return advisories
160+
161+
def get_data_from_md(self, path):
162+
with open(path) as f:
163+
yaml_lines = self.get_yaml_lines(f)
164+
return self.get_data_from_yaml_lines(yaml_lines)

0 commit comments

Comments
 (0)