Skip to content

Commit e7fdde5

Browse files
committed
codestyle fix
Signed-off-by: NucleonGodX <[email protected]>
1 parent b1a80a8 commit e7fdde5

File tree

2 files changed

+49
-44
lines changed

2 files changed

+49
-44
lines changed

vulnerabilities/importers/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
from vulnerabilities.importers import fireeye
2020
from vulnerabilities.importers import gentoo
2121
from vulnerabilities.importers import github_osv
22+
from vulnerabilities.importers import huawei
2223
from vulnerabilities.importers import istio
2324
from vulnerabilities.importers import mozilla
2425
from vulnerabilities.importers import openssl
2526
from vulnerabilities.importers import oss_fuzz
26-
from vulnerabilities.importers import huawei
2727
from vulnerabilities.importers import postgresql
2828
from vulnerabilities.importers import project_kb_msr2019
2929
from vulnerabilities.importers import redhat

vulnerabilities/importers/huawei.py

+48-43
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,32 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10-
import re
1110
import logging
11+
import re
12+
1213
import requests
1314
from bs4 import BeautifulSoup
1415
from packageurl import PackageURL
1516
from univers.version_range import GenericVersionRange
1617
from univers.versions import GenericVersion
17-
from vulnerabilities.importer import AdvisoryData, AffectedPackage, Importer
18+
19+
from vulnerabilities.importer import AdvisoryData
20+
from vulnerabilities.importer import AffectedPackage
21+
from vulnerabilities.importer import Importer
1822

1923
logging.basicConfig(level=logging.INFO)
2024
logger = logging.getLogger(__name__)
2125

26+
2227
class HuaweiImporter(Importer):
2328
root_url = "https://consumer.huawei.com/en/support/bulletin/"
2429
spdx_license_expression = "NOASSERTION"
2530
importer_name = "Huawei Security Bulletin Importer"
2631

2732
def advisory_data(self):
2833
years_months = [
29-
('2024', range(7, 13)), # July 2024 to December 2024
30-
('2025', range(1, 2)) # January 2025
34+
("2024", range(7, 13)), # July 2024 to December 2024
35+
("2025", range(1, 2)), # January 2025
3136
]
3237
for year, months in years_months:
3338
for month in months:
@@ -43,62 +48,56 @@ def advisory_data(self):
4348
def parse_version(self, version_str):
4449
"""Parse version string and separate OS type and version number."""
4550
version_str = version_str.strip()
46-
51+
4752
harmony_match = re.match(r"HarmonyOS\s*(\d+\.\d+\.\d+)", version_str)
4853
if harmony_match:
4954
return "harmony", harmony_match.group(1)
50-
55+
5156
emui_match = re.match(r"EMUI\s*(\d+\.\d+\.\d+)", version_str)
5257
if emui_match:
5358
return "emui", emui_match.group(1)
54-
59+
5560
return None, None
5661

5762
def group_versions_by_os(self, versions):
5863
"""Group versions by OS type."""
59-
grouped = {
60-
"harmony": [],
61-
"emui": []
62-
}
63-
64+
grouped = {"harmony": [], "emui": []}
65+
6466
for version in versions:
6567
os_type, version_num = self.parse_version(version)
6668
if os_type and version_num:
6769
grouped[os_type].append(version_num)
6870
else:
6971
logger.warning(f"Skipping unparseable version: {version}")
70-
72+
7173
return grouped
7274

7375
def create_affected_packages(self, os_type, versions, fixed=False):
7476
"""Create AffectedPackage objects for a given OS type and versions."""
7577
if not versions:
7678
return []
77-
79+
7880
package = PackageURL(
7981
name=os_type,
8082
type="generic",
8183
)
82-
84+
8385
if fixed:
8486
return [
85-
AffectedPackage(
86-
package=package,
87-
fixed_version=GenericVersion(version)
88-
)
87+
AffectedPackage(package=package, fixed_version=GenericVersion(version))
8988
for version in versions
9089
]
9190
else:
9291
return [
9392
AffectedPackage(
9493
package=package,
95-
affected_version_range=GenericVersionRange.from_versions(versions)
94+
affected_version_range=GenericVersionRange.from_versions(versions),
9695
)
9796
]
9897

9998
def to_advisories(self, content, url):
10099
soup = BeautifulSoup(content, features="lxml")
101-
tables = soup.find_all('table')
100+
tables = soup.find_all("table")
102101
if len(tables) < 2:
103102
logger.warning(f"Expected at least 2 tables, found {len(tables)} at {url}")
104103
return
@@ -107,53 +106,59 @@ def to_advisories(self, content, url):
107106
fixed_table = tables[1]
108107
cve_data = {}
109108

110-
for row in affected_table.find_all('tr'):
111-
cols = row.find_all('td')
112-
if len(cols) >= 5:
109+
for row in affected_table.find_all("tr"):
110+
cols = row.find_all("td")
111+
if len(cols) >= 5:
113112
cve_id = cols[0].text.strip()
114-
versions = [v.strip() for v in cols[4].text.strip().split(',') if v.strip()]
113+
versions = [v.strip() for v in cols[4].text.strip().split(",") if v.strip()]
115114
grouped_versions = self.group_versions_by_os(versions)
116115

117116
if cve_id not in cve_data:
118117
cve_data[cve_id] = {
119-
'affected_versions': grouped_versions,
120-
'fixed_versions': {'harmony': [], 'emui': []}
118+
"affected_versions": grouped_versions,
119+
"fixed_versions": {"harmony": [], "emui": []},
121120
}
122121
else:
123122
for os_type in grouped_versions:
124-
cve_data[cve_id]['affected_versions'][os_type].extend(grouped_versions[os_type])
123+
cve_data[cve_id]["affected_versions"][os_type].extend(
124+
grouped_versions[os_type]
125+
)
125126

126-
for row in fixed_table.find_all('tr'):
127-
cols = row.find_all('td')
128-
if len(cols) >= 3:
127+
for row in fixed_table.find_all("tr"):
128+
cols = row.find_all("td")
129+
if len(cols) >= 3:
129130
cve_id = cols[0].text.strip()
130-
versions = [v.strip() for v in cols[2].text.strip().split(',') if v.strip()]
131+
versions = [v.strip() for v in cols[2].text.strip().split(",") if v.strip()]
131132
grouped_versions = self.group_versions_by_os(versions)
132133

133134
if cve_id not in cve_data:
134135
cve_data[cve_id] = {
135-
'affected_versions': {'harmony': [], 'emui': []},
136-
'fixed_versions': grouped_versions
136+
"affected_versions": {"harmony": [], "emui": []},
137+
"fixed_versions": grouped_versions,
137138
}
138139
else:
139140
for os_type in grouped_versions:
140-
cve_data[cve_id]['fixed_versions'][os_type].extend(grouped_versions[os_type])
141+
cve_data[cve_id]["fixed_versions"][os_type].extend(
142+
grouped_versions[os_type]
143+
)
141144

142145
for cve_id, data in cve_data.items():
143146
affected_packages = []
144-
147+
145148
affected_packages.extend(
146-
self.create_affected_packages('harmony', data['affected_versions']['harmony'])
149+
self.create_affected_packages("harmony", data["affected_versions"]["harmony"])
147150
)
148151
affected_packages.extend(
149-
self.create_affected_packages('harmony', data['fixed_versions']['harmony'], fixed=True)
152+
self.create_affected_packages(
153+
"harmony", data["fixed_versions"]["harmony"], fixed=True
154+
)
150155
)
151-
156+
152157
affected_packages.extend(
153-
self.create_affected_packages('emui', data['affected_versions']['emui'])
158+
self.create_affected_packages("emui", data["affected_versions"]["emui"])
154159
)
155160
affected_packages.extend(
156-
self.create_affected_packages('emui', data['fixed_versions']['emui'], fixed=True)
161+
self.create_affected_packages("emui", data["fixed_versions"]["emui"], fixed=True)
157162
)
158163

159164
if affected_packages:
@@ -162,5 +167,5 @@ def to_advisories(self, content, url):
162167
summary="",
163168
references=[],
164169
affected_packages=affected_packages,
165-
url=url
166-
)
170+
url=url,
171+
)

0 commit comments

Comments
 (0)