Skip to content

Commit bd1dfe5

Browse files
committed
Use semver in apache httpd importer
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 85cb602 commit bd1dfe5

3 files changed

Lines changed: 79 additions & 9 deletions

File tree

vulnerabilities/importers/apache_httpd.py

Lines changed: 75 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import requests
2828
from bs4 import BeautifulSoup
2929
from packageurl import PackageURL
30-
from univers.versions import MavenVersion
30+
from univers.versions import SemverVersion
3131
from univers.version_specifier import VersionSpecifier
3232

3333
from vulnerabilities.data_source import Advisory
@@ -53,6 +53,12 @@ class ApacheHTTPDDataSource(DataSource):
5353
def set_api(self):
5454
self.version_api = GitHubTagsAPI()
5555
asyncio.run(self.version_api.load_api(["apache/httpd"]))
56+
self.version_api.cache["apache/httpd"] = set(
57+
filter(
58+
lambda version: version.value not in ignore_tags,
59+
self.version_api.cache["apache/httpd"],
60+
)
61+
)
5662

5763
def updated_advisories(self):
5864
links = fetch_links(self.base_url)
@@ -106,7 +112,7 @@ def to_advisory(self, data):
106112
[
107113
PackageURL(type="apache", name="httpd", version=version)
108114
for version in self.version_api.get("apache/httpd").valid_versions
109-
if MavenVersion(version) in version_range
115+
if SemverVersion(version) in version_range
110116
]
111117
)
112118

@@ -115,7 +121,7 @@ def to_advisory(self, data):
115121
[
116122
PackageURL(type="apache", name="httpd", version=version)
117123
for version in self.version_api.get("apache/httpd").valid_versions
118-
if MavenVersion(version) in version_range
124+
if SemverVersion(version) in version_range
119125
]
120126
)
121127

@@ -135,13 +141,13 @@ def to_version_ranges(self, versions_data):
135141
if range_expression == "<":
136142
fixed_version_ranges.append(
137143
VersionSpecifier.from_scheme_version_spec_string(
138-
"maven", ">={}".format(version_value)
144+
"semver", ">={}".format(version_value)
139145
)
140146
)
141147
elif range_expression == "=" or range_expression == "?=":
142148
affected_version_ranges.append(
143149
VersionSpecifier.from_scheme_version_spec_string(
144-
"maven", "{}".format(version_value)
150+
"semver", "{}".format(version_value)
145151
)
146152
)
147153

@@ -158,3 +164,67 @@ def fetch_links(url):
158164
continue
159165
links.append(urllib.parse.urljoin(url, link))
160166
return links
167+
168+
169+
ignore_tags = {
170+
"AGB_BEFORE_AAA_CHANGES",
171+
"APACHE_1_2b1",
172+
"APACHE_1_2b10",
173+
"APACHE_1_2b11",
174+
"APACHE_1_2b2",
175+
"APACHE_1_2b3",
176+
"APACHE_1_2b4",
177+
"APACHE_1_2b5",
178+
"APACHE_1_2b6",
179+
"APACHE_1_2b7",
180+
"APACHE_1_2b8",
181+
"APACHE_1_2b9",
182+
"APACHE_1_3_PRE_NT",
183+
"APACHE_1_3a1",
184+
"APACHE_1_3b1",
185+
"APACHE_1_3b2",
186+
"APACHE_1_3b3",
187+
"APACHE_1_3b5",
188+
"APACHE_1_3b6",
189+
"APACHE_1_3b7",
190+
"APACHE_2_0_2001_02_09",
191+
"APACHE_2_0_52_WROWE_RC1",
192+
"APACHE_2_0_ALPHA",
193+
"APACHE_2_0_ALPHA_2",
194+
"APACHE_2_0_ALPHA_3",
195+
"APACHE_2_0_ALPHA_4",
196+
"APACHE_2_0_ALPHA_5",
197+
"APACHE_2_0_ALPHA_6",
198+
"APACHE_2_0_ALPHA_7",
199+
"APACHE_2_0_ALPHA_8",
200+
"APACHE_2_0_ALPHA_9",
201+
"APACHE_2_0_BETA_CANDIDATE_1",
202+
"APACHE_BIG_SYMBOL_RENAME_POST",
203+
"APACHE_BIG_SYMBOL_RENAME_PRE",
204+
"CHANGES",
205+
"HTTPD_LDAP_1_0_0",
206+
"INITIAL",
207+
"MOD_SSL_2_8_3",
208+
"PCRE_3_9",
209+
"POST_APR_SPLIT",
210+
"PRE_APR_CHANGES",
211+
"STRIKER_2_0_51_RC1",
212+
"STRIKER_2_0_51_RC2",
213+
"STRIKER_2_1_0_RC1",
214+
"WROWE_2_0_43_PRE1",
215+
"apache-1_3-merge-1-post",
216+
"apache-1_3-merge-1-pre",
217+
"apache-1_3-merge-2-post",
218+
"apache-1_3-merge-2-pre",
219+
"apache-apr-merge-3",
220+
"apache-doc-split-01",
221+
"dg_last_1_2_doc_merge",
222+
"djg-apache-nspr-07",
223+
"djg_nspr_split",
224+
"moving_to_httpd_module",
225+
"mpm-3",
226+
"mpm-merge-1",
227+
"mpm-merge-2",
228+
"post_ajp_proxy",
229+
"pre_ajp_proxy",
230+
}

vulnerabilities/package_managers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class VersionResponse:
4949

5050

5151
class VersionAPI:
52-
def __init__(self, cache: Mapping[str, Set[str]] = None):
52+
def __init__(self, cache: Mapping[str, Set[Version]] = None):
5353
self.cache = cache or {}
5454

5555
def get(self, package_name, until=None) -> Set[str]:

vulnerabilities/tests/test_apache_httpd.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@ def test_to_version_ranges(self):
6969

7070
# Check fixed packages
7171
assert [
72-
VersionSpecifier.from_scheme_version_spec_string("maven", ">=1.3.2")
72+
VersionSpecifier.from_scheme_version_spec_string("semver", ">=1.3.2")
7373
] == fixed_version_ranges
7474

7575
# Check vulnerable packages
7676
assert [
77-
VersionSpecifier.from_scheme_version_spec_string("maven", "==1.3.0"),
78-
VersionSpecifier.from_scheme_version_spec_string("maven", "==1.3.1"),
77+
VersionSpecifier.from_scheme_version_spec_string("semver", "==1.3.0"),
78+
VersionSpecifier.from_scheme_version_spec_string("semver", "==1.3.1"),
7979
] == affected_version_ranges
8080

8181
def test_to_advisory(self):

0 commit comments

Comments
 (0)