Skip to content

Commit 92a3f5c

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

3 files changed

Lines changed: 24 additions & 15 deletions

File tree

vulnerabilities/helpers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ 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,
182+
patched_package=patched_package.purl if patched_package else None,
182183
)
183184
)
184185

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: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from dateutil import parser as dateparser
1414
from django.utils.dateparse import parse_datetime
1515

16+
from vulnerabilities.helpers import get_item
1617
from vulnerabilities.package_managers import VersionResponse
1718

1819
LOGGER = logging.getLogger(__name__)
@@ -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,14 +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")
99+
download_item.get("upload_time_iso_8601")
97100
),
98101
)
99102
versions.add(
@@ -117,8 +120,12 @@ def fetch(self, pkg):
117120
self.cache[pkg] = versions
118121
return
119122
for release in response:
120-
if release["number"] and release["published_at"]:
123+
release_date = None
124+
if release.get("published_at"):
121125
release_date = dateparser.parse(release["published_at"])
126+
elif release.get("created_at"):
127+
release_date = dateparser.parse(release["created_at"])
128+
if release.get("number"):
122129
versions.add(LegacyVersion(value=release["number"], release_date=release_date))
123130
else:
124131
LOGGER.error(f"Failed to parse release {release}")
@@ -196,9 +203,9 @@ def nuget_url(pkg_name: str) -> str:
196203
@staticmethod
197204
def extract_versions(resp: dict) -> Set[LegacyVersion]:
198205
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 {}
206+
for entry_group in resp.get("items") or []:
207+
for entry in entry_group.get("items") or []:
208+
catalog_entry = entry.get("catalogEntry") or {}
202209
version = catalog_entry.get("version")
203210
release_date = dateparser.parse(catalog_entry.get("published"))
204211
if version and release_date:
@@ -345,7 +352,7 @@ def composer_url(pkg_name: str) -> Optional[str]:
345352
@staticmethod
346353
def extract_versions(resp: dict, pkg_name: str) -> Set[LegacyVersion]:
347354
all_versions = set()
348-
for version in resp["packages"][pkg_name]:
355+
for version in get_item(resp, "packages", pkg_name):
349356
if "dev" in version:
350357
continue
351358

@@ -355,7 +362,9 @@ def extract_versions(resp: dict, pkg_name: str) -> Set[LegacyVersion]:
355362
all_versions.add(
356363
LegacyVersion(
357364
value=version.lstrip("v"),
358-
release_date=dateparser.parse(resp["packages"][pkg_name][version]["time"]),
365+
release_date=dateparser.parse(
366+
get_item(resp, "packages", pkg_name, version, "time")
367+
),
359368
)
360369
)
361370
return all_versions

0 commit comments

Comments
 (0)