2020# for any legal advice.
2121# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
2222# Visit https://github.com/nexB/vulnerablecode/ for support and download.
23- from typing import Any , Iterable
23+ from typing import Any
24+ from typing import Iterable
2425from typing import List
2526from typing import Mapping
2627
2728import requests
2829import saneyaml
2930from bs4 import BeautifulSoup
3031
31- from vulnerabilities .importer import AdvisoryData
32+ from vulnerabilities .helpers import is_cve
33+ from vulnerabilities .importer import AdvisoryData
3234from vulnerabilities .importer import Importer
3335from vulnerabilities .importer import Reference
34- from vulnerabilities .helpers import is_cve
35-
36- BASE_URL = "https://secdb.alpinelinux.org/"
3736
3837
3938class AlpineImporter (Importer ):
@@ -44,6 +43,7 @@ def advisory_data(self) -> Iterable[AdvisoryData]:
4443
4544
4645def fetch_advisory_links ():
46+ BASE_URL = "https://secdb.alpinelinux.org/"
4747 index_page = BeautifulSoup (requests .get (BASE_URL ).content , features = "lxml" )
4848
4949 alpine_versions = [
@@ -52,34 +52,43 @@ def fetch_advisory_links():
5252
5353 advisory_directory_links = [f"{ BASE_URL } { version } " for version in alpine_versions ]
5454
55+ advisory_links = []
5556 for advisory_directory_link in advisory_directory_links :
5657 advisory_directory_page = requests .get (advisory_directory_link ).content
5758 advisory_directory_page = BeautifulSoup (
5859 advisory_directory_page , features = "lxml"
5960 )
60- yield [
61- f"{ advisory_directory_link } { anchore_tag .text } "
62- for anchore_tag in advisory_directory_page .find_all ("a" )
63- if anchore_tag .text .endswith ("yaml" )
64- ]
61+ advisory_links .extend (
62+ [
63+ f"{ advisory_directory_link } { anchore_tag .text } "
64+ for anchore_tag in advisory_directory_page .find_all ("a" )
65+ if anchore_tag .text .endswith ("yaml" )
66+ ]
67+ )
68+
69+ return advisory_links
6570
6671
67- def process_link (link ) -> List [ AdvisoryData ]:
72+ def process_link (link ) -> Iterable [ Iterable [ AdvisoryData ] ]:
6873 yaml_response = requests .get (link ).content
6974 record = saneyaml .load (yaml_response )
75+ advisories : List [AdvisoryData ] = []
7076
7177 if record ["packages" ] is None :
72- return []
78+ return advisories
7379
7480 for package in record ["packages" ]:
75- yield load_advisories (
76- package ["pkg" ],
81+ advisories .extend (
82+ load_advisories (
83+ package ["pkg" ],
84+ )
7785 )
86+ return advisories
7887
7988
8089def load_advisories (
8190 pkg_infos : Mapping [str , Any ],
82- ) -> List [AdvisoryData ]:
91+ ) -> Iterable [AdvisoryData ]:
8392
8493 assert isinstance (pkg_infos ["secfixes" ], Mapping [str , List ])
8594
0 commit comments