Skip to content

Commit 86a1c65

Browse files
committed
Update Alpine to avoid fetching the same URL links multiple times
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent bba1080 commit 86a1c65

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

vulnerabilities/pipelines/v2_importers/alpine_linux_importer.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,17 @@ def collect_advisories(self) -> Iterable[AdvisoryData]:
4949
advisory_directory_links = fetch_advisory_directory_links(
5050
page_response_content, self.url, self.log
5151
)
52-
advisory_links = []
52+
advisory_links = set()
53+
visited_directories = set()
5354
for advisory_directory_link in advisory_directory_links:
55+
if advisory_directory_link in visited_directories:
56+
continue
57+
5458
advisory_directory_page = fetch_response(advisory_directory_link).content
55-
advisory_links.extend(
59+
advisory_links.update(
5660
fetch_advisory_links(advisory_directory_page, advisory_directory_link, self.log)
5761
)
62+
5863
for link in advisory_links:
5964
record = fetch_response(link).json()
6065
if not record["packages"]:
@@ -241,11 +246,10 @@ def load_advisories(
241246
try:
242247
fixed_version_range = AlpineLinuxVersionRange.from_versions([version])
243248
except InvalidVersion as e:
244-
if logger:
245-
logger(
246-
f"{version!r} is not a valid AlpineVersion {e!r}",
247-
level=logging.DEBUG,
248-
)
249+
logger(
250+
f"{version!r} is not a valid AlpineVersion {e!r}",
251+
level=logging.DEBUG,
252+
)
249253

250254
if not isinstance(archs, List):
251255
if logger:
@@ -258,33 +262,36 @@ def load_advisories(
258262
if archs and fixed_version_range:
259263
for arch in archs:
260264
qualifiers["arch"] = arch
265+
purl = PackageURL(
266+
type="apk",
267+
namespace="alpine",
268+
name=pkg_infos["name"],
269+
qualifiers=qualifiers,
270+
)
261271
affected_packages.append(
262272
AffectedPackageV2(
263-
package=PackageURL(
264-
type="apk",
265-
namespace="alpine",
266-
name=pkg_infos["name"],
267-
qualifiers=qualifiers,
268-
),
273+
package=purl,
269274
fixed_version_range=fixed_version_range,
270275
)
271276
)
272277

273278
if not archs and fixed_version_range:
274279
# there is no arch, this is not an arch-specific package
280+
purl = PackageURL(
281+
type="apk",
282+
namespace="alpine",
283+
name=pkg_infos["name"],
284+
qualifiers=qualifiers,
285+
)
275286
affected_packages.append(
276287
AffectedPackageV2(
277-
package=PackageURL(
278-
type="apk",
279-
namespace="alpine",
280-
name=pkg_infos["name"],
281-
qualifiers=qualifiers,
282-
),
288+
package=purl,
283289
fixed_version_range=fixed_version_range,
284290
)
285291
)
286292

287-
for advisory_id in aliases:
293+
for cve in aliases:
294+
advisory_id = f"{pkg_infos['name']}/{qualifiers['distroversion']}/{cve}"
288295
yield AdvisoryData(
289296
advisory_id=advisory_id,
290297
aliases=[],

vulnerabilities/tests/pipelines/v2_importers/test_alpine_linux_importer_pipeline.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_process_record():
3434
logger = TestLogger()
3535
expected_advisories = [
3636
AdvisoryData(
37-
advisory_id="XSA-248",
37+
advisory_id="xen/v3.11/XSA-248",
3838
aliases=[],
3939
summary="",
4040
affected_packages=[
@@ -203,7 +203,7 @@ def test_process_record():
203203
original_advisory_text=None,
204204
),
205205
AdvisoryData(
206-
advisory_id="XSA-252",
206+
advisory_id="xen/v3.11/XSA-252",
207207
aliases=[],
208208
summary="",
209209
affected_packages=[],
@@ -223,7 +223,7 @@ def test_process_record():
223223
original_advisory_text=None,
224224
),
225225
AdvisoryData(
226-
advisory_id="CVE-2018-7540",
226+
advisory_id="xen/v3.11/CVE-2018-7540",
227227
aliases=[],
228228
summary="",
229229
affected_packages=[
@@ -397,7 +397,7 @@ def test_process_record():
397397
original_advisory_text=None,
398398
),
399399
AdvisoryData(
400-
advisory_id="XSA-252",
400+
advisory_id="xen/v3.11/XSA-252",
401401
aliases=[],
402402
summary="",
403403
affected_packages=[
@@ -571,7 +571,7 @@ def test_process_record():
571571
original_advisory_text=None,
572572
),
573573
AdvisoryData(
574-
advisory_id="CVE-2017-9669",
574+
advisory_id="apk-tools/v3.11/CVE-2017-9669",
575575
aliases=[],
576576
summary="",
577577
affected_packages=[
@@ -740,7 +740,7 @@ def test_process_record():
740740
original_advisory_text=None,
741741
),
742742
AdvisoryData(
743-
advisory_id="CVE-2017-9671",
743+
advisory_id="apk-tools/v3.11/CVE-2017-9671",
744744
aliases=[],
745745
summary="",
746746
affected_packages=[
@@ -909,6 +909,7 @@ def test_process_record():
909909
original_advisory_text=None,
910910
),
911911
]
912+
912913
with open(TEST_DATA / "v3.11/main.json") as f:
913914
found_advisories = list(
914915
process_record(

0 commit comments

Comments
 (0)