3434
3535from vulnerabilities .data_source import Advisory
3636from vulnerabilities .data_source import GitDataSource
37- from vulnerabilities .data_source import VulnerabilityReferenceUnit
37+ from vulnerabilities .data_source import VulnerabilityReferenceUnit
3838
3939
4040def validate_schema (advisory_dict ):
@@ -54,14 +54,12 @@ def validate_schema(advisory_dict):
5454 Regex (r"XSA-\d{3}" ),
5555 Regex (r"ZBX-\d{4}" ),
5656 Regex (r"wnpa-sec-\d{4}-\d{2}" ),
57-
58-
5957 )
6058 ],
6159 "" ,
6260 # FIXME: Remove the None when below issue gets fixed
6361 # https://gitlab.alpinelinux.org/alpine/infra/alpine-secdb/-/issues/1
64- None
62+ None ,
6563 ),
6664 },
6765 }
@@ -73,13 +71,13 @@ def validate_schema(advisory_dict):
7371
7472
7573class AlpineDataSource (GitDataSource ):
76-
7774 def __enter__ (self ):
7875 super (AlpineDataSource , self ).__enter__ ()
7976
80- if not getattr (self , ' _added_files' , None ):
77+ if not getattr (self , " _added_files" , None ):
8178 self ._added_files , self ._updated_files = self .file_changes (
82- recursive = True , file_ext = 'yaml' )
79+ recursive = True , file_ext = "yaml"
80+ )
8381
8482 def updated_advisories (self ) -> Set [Advisory ]:
8583 files = self ._updated_files .union (self ._added_files )
@@ -95,42 +93,36 @@ def _process_file(self, path) -> List[Advisory]:
9593 with open (path ) as f :
9694 record = yaml .safe_load (f )
9795
98- if record [' packages' ] is None :
96+ if record [" packages" ] is None :
9997 return advisories
10098 validate_schema (record )
10199
102- for p in record ['packages' ]:
103- advisories .extend (self ._load_advisories (
104- p ['pkg' ],
105- record ['distroversion' ],
106- record ['reponame' ],
107- record ['archs' ],
108- ))
100+ for p in record ["packages" ]:
101+ advisories .extend (
102+ self ._load_advisories (
103+ p ["pkg" ], record ["distroversion" ], record ["reponame" ], record ["archs" ],
104+ )
105+ )
109106
110107 return advisories
111108
112109 def _load_advisories (
113- self ,
114- pkg_infos : Mapping [str , Any ],
115- distroversion : str ,
116- reponame : str ,
117- archs : Iterable [str ],
110+ self , pkg_infos : Mapping [str , Any ], distroversion : str , reponame : str , archs : Iterable [str ],
118111 ) -> List [Advisory ]:
119112
120113 advisories = []
121114
122- for version , fixed_vulns in pkg_infos [' secfixes' ].items ():
115+ for version , fixed_vulns in pkg_infos [" secfixes" ].items ():
123116
124117 if fixed_vulns is None :
125118 continue
126119
127120 resolved_purls = {
128121 PackageURL (
129- name = pkg_infos [' name' ],
130- type = ' alpine' ,
122+ name = pkg_infos [" name" ],
123+ type = " alpine" ,
131124 version = version ,
132- qualifiers = {
133- 'arch' : arch , 'distroversion' : distroversion , 'reponame' : reponame },
125+ qualifiers = {"arch" : arch , "distroversion" : distroversion , "reponame" : reponame },
134126 )
135127 for arch in archs
136128 }
@@ -140,32 +132,41 @@ def _load_advisories(
140132 references = []
141133 for reference_id in vuln_ids [1 :]:
142134
143- if reference_id .startswith ('XSA' ):
144- xsa_id = reference_id .split ('-' )[- 1 ]
145- references .append (VulnerabilityReferenceUnit (
146- reference_id = reference_id ,
147- url = 'https://xenbits.xen.org/xsa/advisory-{}.html' .format (xsa_id )
148- ))
149-
150- elif reference_id .startswith ('ZBX' ):
151- references .append (VulnerabilityReferenceUnit (
152- reference_id = reference_id ,
153- url = 'https://support.zabbix.com/browse/{}' .format (reference_id )
154- ))
155-
156- elif reference_id .startswith ('wnpa-sec' ):
157- references .append (VulnerabilityReferenceUnit (
158- reference_id = reference_id ,
159- url = 'https://www.wireshark.org/security/{}.html' .format (reference_id )
160- ))
161-
162-
163- advisories .append (Advisory (
164- summary = '' ,
165- impacted_package_urls = [],
166- resolved_package_urls = resolved_purls ,
167- vuln_references = references ,
168- cve_id = vuln_ids [0 ] if vuln_ids [0 ] != 'CVE-????-?????' else None ,
169- ))
135+ if reference_id .startswith ("XSA" ):
136+ xsa_id = reference_id .split ("-" )[- 1 ]
137+ references .append (
138+ VulnerabilityReferenceUnit (
139+ reference_id = reference_id ,
140+ url = "https://xenbits.xen.org/xsa/advisory-{}.html" .format (xsa_id ),
141+ )
142+ )
143+
144+ elif reference_id .startswith ("ZBX" ):
145+ references .append (
146+ VulnerabilityReferenceUnit (
147+ reference_id = reference_id ,
148+ url = "https://support.zabbix.com/browse/{}" .format (reference_id ),
149+ )
150+ )
151+
152+ elif reference_id .startswith ("wnpa-sec" ):
153+ references .append (
154+ VulnerabilityReferenceUnit (
155+ reference_id = reference_id ,
156+ url = "https://www.wireshark.org/security/{}.html" .format (
157+ reference_id
158+ ),
159+ )
160+ )
161+
162+ advisories .append (
163+ Advisory (
164+ summary = "" ,
165+ impacted_package_urls = [],
166+ resolved_package_urls = resolved_purls ,
167+ vuln_references = references ,
168+ cve_id = vuln_ids [0 ] if vuln_ids [0 ] != "CVE-????-?????" else None ,
169+ )
170+ )
170171
171172 return advisories
0 commit comments