Skip to content

Commit 58aeb83

Browse files
committed
Add schema validation for debian importer
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent bd28137 commit 58aeb83

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

vulnerabilities/scraper/debian.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import json
2525
from urllib.request import urlopen
26+
from schema import Regex, Or, Schema, Optional
2627

2728
DEBIAN_TRACKER_URL = 'https://security-tracker.debian.org/tracker/data/json'
2829

@@ -33,8 +34,10 @@ def extract_vulnerabilities(debian_data, base_release='jessie'):
3334
package and vulnerability from a mapping of Debian vulnerabilities
3435
data.
3536
"""
36-
package_vulnerabilities = []
3737

38+
validate_schema(debian_data)
39+
40+
package_vulnerabilities = []
3841
for package_name, vulnerabilities in debian_data.items():
3942
if not vulnerabilities or not package_name:
4043
continue
@@ -68,6 +71,41 @@ def extract_vulnerabilities(debian_data, base_release='jessie'):
6871
return package_vulnerabilities
6972

7073

74+
def validate_schema(advisory_dict):
75+
76+
deb_versions = ['bullseye', 'buster', 'buster-security', 'sid',
77+
'stretch', 'stretch-security', 'jessie', 'jessie-security']
78+
scheme = {
79+
str:
80+
{
81+
Or(Regex(r"CVE-\d+-\d+"), Regex(r"TEMP-.+-.+")):
82+
{
83+
'releases':
84+
{
85+
Or(*deb_versions):
86+
{
87+
'repositories':
88+
{
89+
Or(*deb_versions): str
90+
},
91+
'status': str,
92+
'urgency': str,
93+
Optional('fixed_version'): str,
94+
Optional(str): object,
95+
}
96+
97+
},
98+
Optional('description'): str,
99+
Optional('debianbug'): int,
100+
Optional(str): object,
101+
}
102+
}
103+
104+
}
105+
106+
Schema(scheme).validate(advisory_dict)
107+
108+
71109
def scrape_vulnerabilities():
72110
"""
73111
Scrape debian' security tracker.

0 commit comments

Comments
 (0)