Skip to content

Commit 7baa3d2

Browse files
committed
add alpine-linux importer to importer registry
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 34ef7dd commit 7baa3d2

2 files changed

Lines changed: 26 additions & 16 deletions

File tree

vulnerabilities/importers/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
2121
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
2222
from vulnerabilities.importers import nginx
23+
from vulnerabilities.importers import alpine_linux
2324

24-
IMPORTERS_REGISTRY = [nginx.NginxImporter]
25+
IMPORTERS_REGISTRY = [nginx.NginxImporter, alpine_linux.AlpineImporter]
2526

2627
IMPORTERS_REGISTRY = {x.qualified_name: x for x in IMPORTERS_REGISTRY}

vulnerabilities/importers/alpine_linux.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,19 @@
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
2425
from typing import List
2526
from typing import Mapping
2627

2728
import requests
2829
import saneyaml
2930
from bs4 import BeautifulSoup
3031

31-
from vulnerabilities.importer import AdvisoryData
32+
from vulnerabilities.helpers import is_cve
33+
from vulnerabilities.importer import AdvisoryData
3234
from vulnerabilities.importer import Importer
3335
from vulnerabilities.importer import Reference
34-
from vulnerabilities.helpers import is_cve
35-
36-
BASE_URL = "https://secdb.alpinelinux.org/"
3736

3837

3938
class AlpineImporter(Importer):
@@ -44,6 +43,7 @@ def advisory_data(self) -> Iterable[AdvisoryData]:
4443

4544

4645
def 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

8089
def 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

Comments
 (0)