Skip to content

Commit 05fcc64

Browse files
authored
Merge pull request #505 from Hritik14/importer-bugfix
Importers bugfix [nginx, debian_oval, ubuntu]
2 parents 475bb96 + 71a3d75 commit 05fcc64

5 files changed

Lines changed: 27 additions & 13 deletions

File tree

vulnerabilities/data_source.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ def updated_advisories(self) -> List[Advisory]:
483483
except Exception:
484484
logger.error(
485485
f"Failed to get updated_advisories: {oval_file!r} "
486-
"with {metadata!r}:\n" + traceback.format_exc()
486+
f"with {metadata!r}:\n" + traceback.format_exc()
487487
)
488488
continue
489489

@@ -538,7 +538,7 @@ def get_data_from_xml_doc(self, xml_doc: ET.ElementTree, pkg_metadata={}) -> Lis
538538
affected_version_range = VersionSpecifier.from_scheme_version_spec_string(
539539
version_scheme, affected_version_range
540540
)
541-
all_versions = self.pkg_manager_api.get(package_name)
541+
all_versions = self.pkg_manager_api.get(package_name).valid_versions
542542

543543
# FIXME: what is this 50 DB limit? that's too small for versions
544544
# FIXME: we should not drop data this way

vulnerabilities/importers/nginx.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from vulnerabilities.data_source import DataSourceConfiguration
3535
from vulnerabilities.data_source import Reference
3636
from vulnerabilities.package_managers import GitHubTagsAPI
37+
from vulnerabilities.package_managers import Version
3738
from vulnerabilities.helpers import nearest_patched_package
3839

3940

@@ -53,10 +54,14 @@ def set_api(self):
5354

5455
# For some reason nginx tags it's releases are in the form of `release-1.2.3`
5556
# Chop off the `release-` part here.
56-
for index, version in enumerate(self.version_api.cache["nginx/nginx"].valid_versions):
57-
self.version_api.cache["nginx/nginx"].valid_versions[index] = version.replace(
58-
"release-", ""
57+
normalized_versions = set()
58+
while self.version_api.cache["nginx/nginx"]:
59+
version = self.version_api.cache["nginx/nginx"].pop()
60+
normalized_version = Version(
61+
version.value.replace("release-", ""), version.release_date
5962
)
63+
normalized_versions.add(normalized_version)
64+
self.version_api.cache["nginx/nginx"] = normalized_versions
6065

6166
def updated_advisories(self):
6267
advisories = []

vulnerabilities/package_managers.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,12 @@ async def fetch(self, pkg, session):
9898
self.cache[pkg] = {}
9999
break
100100
for release in resp_json["entries"]:
101-
all_versions.add(release["source_package_version"].replace("0:", ""))
101+
all_versions.add(
102+
Version(
103+
value=release["source_package_version"].replace("0:", ""),
104+
release_date=release["date_published"],
105+
)
106+
)
102107
if resp_json.get("next_collection_link"):
103108
url = resp_json["next_collection_link"]
104109
else:
@@ -233,7 +238,7 @@ async def fetch(self, pkg, session, retry_count=5):
233238
self.cache[pkg] = {}
234239
return
235240
for release in resp_json["versions"]:
236-
all_versions.add(release["version"].replace("0:", ""))
241+
all_versions.add(Version(value=release["version"].replace("0:", "")))
237242

238243
self.cache[pkg] = all_versions
239244
# TODO : Handle ServerDisconnectedError by using some sort of
@@ -372,14 +377,14 @@ class GitHubTagsAPI(VersionAPI):
372377

373378
package_type = "github"
374379

375-
async def fetch(self, owner_repo: str, session) -> None:
380+
async def fetch(self, owner_repo: str, session, endpoint=None) -> None:
376381
"""
377382
owner_repo is a string of format "{repo_owner}/{repo_name}"
378383
Example value of owner_repo = "nexB/scancode-toolkit"
379384
"""
380385
self.cache[owner_repo] = set()
381-
endpoint = f"https://github.com/{owner_repo}/tags"
382-
386+
if not endpoint:
387+
endpoint = f"https://github.com/{owner_repo}/tags"
383388
resp = await session.get(endpoint)
384389
resp = await resp.read()
385390

@@ -406,7 +411,7 @@ async def fetch(self, owner_repo: str, session) -> None:
406411

407412
if url:
408413
# FIXME: this could be asynced to improve performance
409-
await self.fetch(owner_repo, url)
414+
await self.fetch(owner_repo, session, url)
410415

411416

412417
class HexVersionAPI(VersionAPI):

vulnerabilities/tests/test_debian_oval.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from packageurl import PackageURL
77

88
from vulnerabilities.importers.debian_oval import DebianOvalDataSource
9+
from vulnerabilities.package_managers import VersionResponse
910
from vulnerabilities.data_source import Advisory
1011
from vulnerabilities.helpers import AffectedPackage
1112

@@ -30,7 +31,9 @@ def setUpClass(cls):
3031

3132
@patch(
3233
"vulnerabilities.importers.debian_oval.DebianVersionAPI.get",
33-
return_value={"1.11.1+dfsg-5+deb7u1", "0.11.1+dfsg-5+deb7u1", "2.3.9"},
34+
return_value=VersionResponse(
35+
valid_versions={"1.11.1+dfsg-5+deb7u1", "0.11.1+dfsg-5+deb7u1", "2.3.9"}
36+
),
3437
)
3538
@patch("vulnerabilities.importers.debian_oval.DebianVersionAPI.load_api", new=mock)
3639
def test_get_data_from_xml_doc(self, mock_write):

vulnerabilities/tests/test_ubuntu.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from vulnerabilities.oval_parser import OvalParser
1212
from vulnerabilities.importers.ubuntu import UbuntuDataSource
13+
from vulnerabilities.package_managers import VersionResponse
1314
from vulnerabilities.data_source import Advisory
1415
from vulnerabilities.data_source import Reference
1516
from vulnerabilities.helpers import AffectedPackage
@@ -182,7 +183,7 @@ def setUpClass(cls):
182183

183184
@patch(
184185
"vulnerabilities.importers.ubuntu.LaunchpadVersionAPI.get",
185-
return_value={"0.3.0", "0.2.0", "2.14-2"},
186+
return_value=VersionResponse(valid_versions={"0.3.0", "0.2.0", "2.14-2"}),
186187
)
187188
@patch("vulnerabilities.importers.ubuntu.LaunchpadVersionAPI.load_api", new=mock)
188189
def test_get_data_from_xml_doc(self, mock_write):

0 commit comments

Comments
 (0)