Skip to content

Commit f4b3fa8

Browse files
committed
Fix github improver
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent a59b5e4 commit f4b3fa8

3 files changed

Lines changed: 21 additions & 16 deletions

File tree

vulnerabilities/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def nearest_patched_package(
178178

179179
affected_package_with_patched_package_objects.append(
180180
AffectedPackage(
181-
vulnerable_package=vulnerable_package.purl, patched_package=patched_package.purl
181+
vulnerable_package=vulnerable_package.purl, patched_package=patched_package.purl if patched_package else None
182182
)
183183
)
184184

vulnerabilities/importers/github.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,11 +527,10 @@ def resolve_version_range(
527527
for package_version in package_versions or []:
528528
if package_version in ignorable_versions:
529529
continue
530-
# Remove leading 'v'
531-
if package_version.startswith("v") or package_version.startswith("V"):
532-
package_version = package_version.replace("V", "").replace("v", "")
533530
# Remove whitespace
534531
package_version = package_version.replace(" ", "")
532+
# Remove leading 'v'
533+
package_version = package_version.lstrip("v").lstrip("V")
535534
try:
536535
version = affected_version_range.version_class(package_version)
537536
except Exception:

vulnerabilities/package_managers_2.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import requests
1313
from dateutil import parser as dateparser
1414
from django.utils.dateparse import parse_datetime
15+
from vulnerabilities.helpers import get_item
1516

1617
from vulnerabilities.package_managers import VersionResponse
1718

@@ -31,7 +32,11 @@ class VersionResponse:
3132

3233

3334
def get_response(url, type="json"):
34-
resp = requests.get(url=url)
35+
try:
36+
resp = requests.get(url=url)
37+
except:
38+
LOGGER.error(traceback.format_exc())
39+
return None
3540
if not resp.status_code == 200:
3641
LOGGER.error(f"Error while fetching {url}: {resp.status_code}")
3742
return None
@@ -86,15 +91,12 @@ def fetch(self, pkg):
8691
self.cache[pkg] = versions
8792
return
8893

89-
for version, download_items in response["releases"].items() or {}:
94+
for version, download_items in response.get("releases").items() or {}:
9095
if download_items:
9196
latest_download_item = max(
9297
download_items,
9398
key=lambda download_item: dateparser.parse(
94-
download_item["upload_time_iso_8601"]
95-
if "upload_time_iso_8601" in download_item
96-
else LOGGER.error(f"{download_item} has no upload_time_iso_8601")
97-
),
99+
download_item.get("upload_time_iso_8601")),
98100
)
99101
versions.add(
100102
LegacyVersion(
@@ -117,8 +119,12 @@ def fetch(self, pkg):
117119
self.cache[pkg] = versions
118120
return
119121
for release in response:
120-
if release["number"] and release["published_at"]:
122+
release_date = None
123+
if release.get("published_at"):
121124
release_date = dateparser.parse(release["published_at"])
125+
elif release.get("created_at"):
126+
release_date = dateparser.parse(release["created_at"])
127+
if release.get("number"):
122128
versions.add(LegacyVersion(value=release["number"], release_date=release_date))
123129
else:
124130
LOGGER.error(f"Failed to parse release {release}")
@@ -196,9 +202,9 @@ def nuget_url(pkg_name: str) -> str:
196202
@staticmethod
197203
def extract_versions(resp: dict) -> Set[LegacyVersion]:
198204
all_versions = set()
199-
for entry_group in resp["items"] or []:
200-
for entry in entry_group["items"] or []:
201-
catalog_entry = entry["catalogEntry"] or {}
205+
for entry_group in resp.get("items") or []:
206+
for entry in entry_group.get("items") or []:
207+
catalog_entry = entry.get("catalogEntry") or {}
202208
version = catalog_entry.get("version")
203209
release_date = dateparser.parse(catalog_entry.get("published"))
204210
if version and release_date:
@@ -345,7 +351,7 @@ def composer_url(pkg_name: str) -> Optional[str]:
345351
@staticmethod
346352
def extract_versions(resp: dict, pkg_name: str) -> Set[LegacyVersion]:
347353
all_versions = set()
348-
for version in resp["packages"][pkg_name]:
354+
for version in get_item(resp, "packages", pkg_name):
349355
if "dev" in version:
350356
continue
351357

@@ -355,7 +361,7 @@ def extract_versions(resp: dict, pkg_name: str) -> Set[LegacyVersion]:
355361
all_versions.add(
356362
LegacyVersion(
357363
value=version.lstrip("v"),
358-
release_date=dateparser.parse(resp["packages"][pkg_name][version]["time"]),
364+
release_date=dateparser.parse(get_item(resp, "packages", pkg_name, version, "time")),
359365
)
360366
)
361367
return all_versions

0 commit comments

Comments
 (0)