diff --git a/requirements.txt b/requirements.txt index 41303e17f..3775367ef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,6 +13,7 @@ Django==3.0.7 django-filter==2.2.0 djangorestframework==3.11.0 django-widget-tweaks==1.4.8 +drf-yasg==1.17.1 gunicorn==19.7.1 importlib-metadata==1.3.0 ipython==7.13.0 diff --git a/vulnerabilities/api.py b/vulnerabilities/api.py index eb7e37f30..7b9d383ce 100644 --- a/vulnerabilities/api.py +++ b/vulnerabilities/api.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# Copyright (c) nexB Inc. and others. All rights reserved. # http://nexb.com and https://github.com/nexB/vulnerablecode/ # The VulnerableCode software is licensed under the Apache License version 2.0. # Data generated with VulnerableCode require an acknowledgment. @@ -18,13 +18,16 @@ # OR CONDITIONS OF ANY KIND, either express or implied. No content created from # VulnerableCode should be considered or used as legal advice. Consult an Attorney # for any legal advice. -# VulnerableCode is a free software code scanning tool from nexB Inc. and others. +# VulnerableCode is a free software tool from nexB Inc. and others. # Visit https://github.com/nexB/vulnerablecode/ for support and download. -from rest_framework import serializers -from rest_framework import viewsets +from urllib.parse import unquote +from django.urls import reverse +from django_filters import rest_framework as filters from packageurl import PackageURL +from rest_framework import serializers +from rest_framework import viewsets from vulnerabilities.models import Package from vulnerabilities.models import Vulnerability @@ -35,61 +38,106 @@ class VulnerabilityReferenceSerializer(serializers.ModelSerializer): class Meta: model = VulnerabilityReference fields = [ - 'source', - 'reference_id', - 'url', + "source", + "reference_id", + "url", ] -class VulnerabilitySerializer(serializers.ModelSerializer): - references = VulnerabilityReferenceSerializer(source='vulnerabilityreference_set', many=True) +class HyperLinkedPackageSerializer(serializers.HyperlinkedModelSerializer): + purl = serializers.CharField(source="package_url") + + class Meta: + model = Package + fields = ["url", "purl"] + + +class HyperLinkedVulnerabilitySerializer(serializers.HyperlinkedModelSerializer): + vulnerability_id = serializers.CharField(source="cve_id") class Meta: model = Vulnerability - fields = [ - 'summary', - 'cvss', - 'references', - ] + fields = ["url", "vulnerability_id"] -class PackageSerializer(serializers.ModelSerializer): - vulnerabilities = VulnerabilitySerializer(many=True) +class VulnerabilitySerializer(serializers.HyperlinkedModelSerializer): + references = VulnerabilityReferenceSerializer(many=True, source="vulnerabilityreference_set") + resolved_packages = HyperLinkedPackageSerializer( + many=True, source="resolved_to", read_only=True + ) + unresolved_packages = HyperLinkedPackageSerializer( + many=True, source="vulnerable_to", read_only=True + ) + + class Meta: + model = Vulnerability + fields = "__all__" + + +class PackageSerializer(serializers.HyperlinkedModelSerializer): + unresolved_vulnerabilities = HyperLinkedVulnerabilitySerializer( + many=True, source="vulnerable_to", read_only=True + ) + resolved_vulnerabilities = HyperLinkedVulnerabilitySerializer( + many=True, source="resolved_to", read_only=True + ) + purl = serializers.CharField(source="package_url") class Meta: model = Package fields = [ - 'name', - 'version', - 'package_url', - 'vulnerabilities', + "url", + "type", + "namespace", + "name", + "version", + "qualifiers", + "subpath", + "purl", + "resolved_vulnerabilities", + "unresolved_vulnerabilities", ] -class PackageViewSet(viewsets.ReadOnlyModelViewSet): - queryset = Package.objects.all() - serializer_class = PackageSerializer - filterset_fields = ('name', 'version') +class PackageFilterSet(filters.FilterSet): + purl = filters.CharFilter(method="filter_purl") - def filter_queryset(self, qs): - purl = self.request.query_params.get('package_url') - if not purl: - return super().filter_queryset(qs) + class Meta: + model = Package + fields = ["name", "type", "version", "subpath", "purl"] + def filter_purl(self, queryset, name, value): + purl = unquote(value) try: purl = PackageURL.from_string(purl) + except ValueError as ve: raise serializers.ValidationError( - detail={'error': f'"{purl}" is not a valid Package URL: {ve}'}, + detail={"error": f'"{purl}" is not a valid Package URL: {ve}'}, ) - # Remove "qualifiers" here because it is stored as one string in the model. - # For example, a row in the database could have the "qualifiers" column - # stored as "foo=bar&spam=eggs". If an API request contains a PURL with - # "spam=eggs&foo=bar", the DB query would not include that row. - attrs = {k: v for k, v in purl.to_dict().items() if v and k != 'qualifiers'} - - # TODO - # Since we are filtering on all the Package URL fields except "qualifiers", - # we'll eventually need database indices on them. + attrs = {k: v for k, v in purl.to_dict().items() if v} return self.queryset.filter(**attrs) + + +class PackageViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Package.objects.all() + serializer_class = PackageSerializer + filter_backends = (filters.DjangoFilterBackend,) + filterset_class = PackageFilterSet + + +class VulnerabilityFilterSet(filters.FilterSet): + vulnerability_id = filters.CharFilter(field_name="cve_id") + + class Meta: + model = Vulnerability + fields = ["vulnerability_id"] + + +class VulnerabilityViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Vulnerability.objects.all() + serializer_class = VulnerabilitySerializer + paginate_by = 50 + filter_backends = (filters.DjangoFilterBackend,) + filterset_class = VulnerabilityFilterSet diff --git a/vulnerabilities/fixtures/debian.json b/vulnerabilities/fixtures/debian.json index 8911afb67..b5d631759 100644 --- a/vulnerabilities/fixtures/debian.json +++ b/vulnerabilities/fixtures/debian.json @@ -34,7 +34,7 @@ "namespace": "debian", "name": "librsync", "version": "0.9.7-10", - "qualifiers": "distro=jessie", + "qualifiers": {"distro":"jessie"}, "subpath": null } }, @@ -46,7 +46,7 @@ "namespace": "debian", "name": "mimetex", "version": "1.74-1", - "qualifiers": "distro=jessie", + "qualifiers": {"distro":"jessie"}, "subpath": null } }, @@ -58,7 +58,7 @@ "namespace": "debian", "name": "mimetex", "version": "1.50-1.1", - "qualifiers": "distro=jessie", + "qualifiers": {"distro":"jessie"}, "subpath": null } }, diff --git a/vulnerabilities/fixtures/ubuntu.json b/vulnerabilities/fixtures/ubuntu.json index 3a17d2025..c13d0cb97 100644 --- a/vulnerabilities/fixtures/ubuntu.json +++ b/vulnerabilities/fixtures/ubuntu.json @@ -35099,7 +35099,7 @@ "fields": { "vulnerability": 186, "package": 246, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35108,7 +35108,7 @@ "fields": { "vulnerability": 187, "package": 247, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35117,7 +35117,7 @@ "fields": { "vulnerability": 188, "package": 248, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35126,7 +35126,7 @@ "fields": { "vulnerability": 189, "package": 249, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35135,7 +35135,7 @@ "fields": { "vulnerability": 190, "package": 250, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35144,7 +35144,7 @@ "fields": { "vulnerability": 191, "package": 251, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35153,7 +35153,7 @@ "fields": { "vulnerability": 192, "package": 252, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35162,7 +35162,7 @@ "fields": { "vulnerability": 193, "package": 253, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35171,7 +35171,7 @@ "fields": { "vulnerability": 194, "package": 254, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35180,7 +35180,7 @@ "fields": { "vulnerability": 195, "package": 255, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35189,7 +35189,7 @@ "fields": { "vulnerability": 196, "package": 256, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35198,7 +35198,7 @@ "fields": { "vulnerability": 197, "package": 257, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35207,7 +35207,7 @@ "fields": { "vulnerability": 198, "package": 258, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35216,7 +35216,7 @@ "fields": { "vulnerability": 198, "package": 259, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35225,7 +35225,7 @@ "fields": { "vulnerability": 198, "package": 260, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35234,7 +35234,7 @@ "fields": { "vulnerability": 198, "package": 261, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35243,7 +35243,7 @@ "fields": { "vulnerability": 198, "package": 262, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35252,7 +35252,7 @@ "fields": { "vulnerability": 199, "package": 263, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35261,7 +35261,7 @@ "fields": { "vulnerability": 200, "package": 264, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35270,7 +35270,7 @@ "fields": { "vulnerability": 201, "package": 265, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35279,7 +35279,7 @@ "fields": { "vulnerability": 202, "package": 266, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35288,7 +35288,7 @@ "fields": { "vulnerability": 203, "package": 267, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35297,7 +35297,7 @@ "fields": { "vulnerability": 204, "package": 268, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35306,7 +35306,7 @@ "fields": { "vulnerability": 205, "package": 269, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35315,7 +35315,7 @@ "fields": { "vulnerability": 206, "package": 270, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35324,7 +35324,7 @@ "fields": { "vulnerability": 207, "package": 271, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35333,7 +35333,7 @@ "fields": { "vulnerability": 207, "package": 272, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35342,7 +35342,7 @@ "fields": { "vulnerability": 207, "package": 273, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35351,7 +35351,7 @@ "fields": { "vulnerability": 207, "package": 274, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35360,7 +35360,7 @@ "fields": { "vulnerability": 207, "package": 275, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35369,7 +35369,7 @@ "fields": { "vulnerability": 207, "package": 276, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35378,7 +35378,7 @@ "fields": { "vulnerability": 208, "package": 277, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35387,7 +35387,7 @@ "fields": { "vulnerability": 209, "package": 278, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35396,7 +35396,7 @@ "fields": { "vulnerability": 210, "package": 279, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35405,7 +35405,7 @@ "fields": { "vulnerability": 211, "package": 280, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35414,7 +35414,7 @@ "fields": { "vulnerability": 212, "package": 281, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35423,7 +35423,7 @@ "fields": { "vulnerability": 213, "package": 282, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35432,7 +35432,7 @@ "fields": { "vulnerability": 214, "package": 283, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35441,7 +35441,7 @@ "fields": { "vulnerability": 215, "package": 284, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35450,7 +35450,7 @@ "fields": { "vulnerability": 216, "package": 285, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35459,7 +35459,7 @@ "fields": { "vulnerability": 217, "package": 286, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35468,7 +35468,7 @@ "fields": { "vulnerability": 217, "package": 287, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35477,7 +35477,7 @@ "fields": { "vulnerability": 218, "package": 288, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35486,7 +35486,7 @@ "fields": { "vulnerability": 219, "package": 289, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35495,7 +35495,7 @@ "fields": { "vulnerability": 220, "package": 290, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35504,7 +35504,7 @@ "fields": { "vulnerability": 221, "package": 291, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35513,7 +35513,7 @@ "fields": { "vulnerability": 222, "package": 292, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35522,7 +35522,7 @@ "fields": { "vulnerability": 223, "package": 293, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35531,7 +35531,7 @@ "fields": { "vulnerability": 223, "package": 294, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35540,7 +35540,7 @@ "fields": { "vulnerability": 223, "package": 295, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35549,7 +35549,7 @@ "fields": { "vulnerability": 223, "package": 296, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35558,7 +35558,7 @@ "fields": { "vulnerability": 224, "package": 297, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35567,7 +35567,7 @@ "fields": { "vulnerability": 225, "package": 298, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35576,7 +35576,7 @@ "fields": { "vulnerability": 225, "package": 299, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35585,7 +35585,7 @@ "fields": { "vulnerability": 225, "package": 300, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35594,7 +35594,7 @@ "fields": { "vulnerability": 225, "package": 301, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35603,7 +35603,7 @@ "fields": { "vulnerability": 226, "package": 302, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35612,7 +35612,7 @@ "fields": { "vulnerability": 226, "package": 303, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35621,7 +35621,7 @@ "fields": { "vulnerability": 227, "package": 304, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35630,7 +35630,7 @@ "fields": { "vulnerability": 227, "package": 305, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35639,7 +35639,7 @@ "fields": { "vulnerability": 228, "package": 306, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35648,7 +35648,7 @@ "fields": { "vulnerability": 228, "package": 307, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35657,7 +35657,7 @@ "fields": { "vulnerability": 229, "package": 308, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35666,7 +35666,7 @@ "fields": { "vulnerability": 229, "package": 309, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35675,7 +35675,7 @@ "fields": { "vulnerability": 230, "package": 310, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35684,7 +35684,7 @@ "fields": { "vulnerability": 230, "package": 311, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35693,7 +35693,7 @@ "fields": { "vulnerability": 231, "package": 312, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35702,7 +35702,7 @@ "fields": { "vulnerability": 231, "package": 313, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35711,7 +35711,7 @@ "fields": { "vulnerability": 232, "package": 314, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35720,7 +35720,7 @@ "fields": { "vulnerability": 232, "package": 315, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35729,7 +35729,7 @@ "fields": { "vulnerability": 233, "package": 316, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35738,7 +35738,7 @@ "fields": { "vulnerability": 234, "package": 317, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35747,7 +35747,7 @@ "fields": { "vulnerability": 235, "package": 318, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35756,7 +35756,7 @@ "fields": { "vulnerability": 235, "package": 319, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35765,7 +35765,7 @@ "fields": { "vulnerability": 236, "package": 320, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35774,7 +35774,7 @@ "fields": { "vulnerability": 237, "package": 321, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35783,7 +35783,7 @@ "fields": { "vulnerability": 238, "package": 322, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35792,7 +35792,7 @@ "fields": { "vulnerability": 238, "package": 323, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35801,7 +35801,7 @@ "fields": { "vulnerability": 238, "package": 324, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35810,7 +35810,7 @@ "fields": { "vulnerability": 239, "package": 325, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35819,7 +35819,7 @@ "fields": { "vulnerability": 240, "package": 326, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35828,7 +35828,7 @@ "fields": { "vulnerability": 241, "package": 327, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35837,7 +35837,7 @@ "fields": { "vulnerability": 242, "package": 328, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35846,7 +35846,7 @@ "fields": { "vulnerability": 243, "package": 329, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35855,7 +35855,7 @@ "fields": { "vulnerability": 244, "package": 330, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35864,7 +35864,7 @@ "fields": { "vulnerability": 245, "package": 331, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35873,7 +35873,7 @@ "fields": { "vulnerability": 246, "package": 332, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35882,7 +35882,7 @@ "fields": { "vulnerability": 247, "package": 333, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35891,7 +35891,7 @@ "fields": { "vulnerability": 248, "package": 334, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35900,7 +35900,7 @@ "fields": { "vulnerability": 249, "package": 335, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35909,7 +35909,7 @@ "fields": { "vulnerability": 250, "package": 336, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35918,7 +35918,7 @@ "fields": { "vulnerability": 251, "package": 337, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35927,7 +35927,7 @@ "fields": { "vulnerability": 252, "package": 338, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35936,7 +35936,7 @@ "fields": { "vulnerability": 253, "package": 339, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35945,7 +35945,7 @@ "fields": { "vulnerability": 254, "package": 340, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35954,7 +35954,7 @@ "fields": { "vulnerability": 254, "package": 341, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35963,7 +35963,7 @@ "fields": { "vulnerability": 255, "package": 342, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35972,7 +35972,7 @@ "fields": { "vulnerability": 255, "package": 343, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35981,7 +35981,7 @@ "fields": { "vulnerability": 256, "package": 344, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35990,7 +35990,7 @@ "fields": { "vulnerability": 256, "package": 345, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -35999,7 +35999,7 @@ "fields": { "vulnerability": 257, "package": 346, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36008,7 +36008,7 @@ "fields": { "vulnerability": 257, "package": 347, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36017,7 +36017,7 @@ "fields": { "vulnerability": 258, "package": 348, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36026,7 +36026,7 @@ "fields": { "vulnerability": 259, "package": 349, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36035,7 +36035,7 @@ "fields": { "vulnerability": 260, "package": 350, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36044,7 +36044,7 @@ "fields": { "vulnerability": 261, "package": 351, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36053,7 +36053,7 @@ "fields": { "vulnerability": 262, "package": 352, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36062,7 +36062,7 @@ "fields": { "vulnerability": 263, "package": 353, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36071,7 +36071,7 @@ "fields": { "vulnerability": 264, "package": 354, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36080,7 +36080,7 @@ "fields": { "vulnerability": 264, "package": 355, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36089,7 +36089,7 @@ "fields": { "vulnerability": 265, "package": 356, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36098,7 +36098,7 @@ "fields": { "vulnerability": 266, "package": 357, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36107,7 +36107,7 @@ "fields": { "vulnerability": 267, "package": 358, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36116,7 +36116,7 @@ "fields": { "vulnerability": 268, "package": 359, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36125,7 +36125,7 @@ "fields": { "vulnerability": 269, "package": 360, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36134,7 +36134,7 @@ "fields": { "vulnerability": 270, "package": 361, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36143,7 +36143,7 @@ "fields": { "vulnerability": 271, "package": 362, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36152,7 +36152,7 @@ "fields": { "vulnerability": 272, "package": 363, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36161,7 +36161,7 @@ "fields": { "vulnerability": 273, "package": 364, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36170,7 +36170,7 @@ "fields": { "vulnerability": 274, "package": 365, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36179,7 +36179,7 @@ "fields": { "vulnerability": 275, "package": 366, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36188,7 +36188,7 @@ "fields": { "vulnerability": 276, "package": 367, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36197,7 +36197,7 @@ "fields": { "vulnerability": 277, "package": 368, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36206,7 +36206,7 @@ "fields": { "vulnerability": 277, "package": 369, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36215,7 +36215,7 @@ "fields": { "vulnerability": 278, "package": 370, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36224,7 +36224,7 @@ "fields": { "vulnerability": 278, "package": 371, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36233,7 +36233,7 @@ "fields": { "vulnerability": 278, "package": 372, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36242,7 +36242,7 @@ "fields": { "vulnerability": 279, "package": 373, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36251,7 +36251,7 @@ "fields": { "vulnerability": 280, "package": 374, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36260,7 +36260,7 @@ "fields": { "vulnerability": 280, "package": 375, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36269,7 +36269,7 @@ "fields": { "vulnerability": 280, "package": 376, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36278,7 +36278,7 @@ "fields": { "vulnerability": 281, "package": 377, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36287,7 +36287,7 @@ "fields": { "vulnerability": 281, "package": 378, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36296,7 +36296,7 @@ "fields": { "vulnerability": 281, "package": 379, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36305,7 +36305,7 @@ "fields": { "vulnerability": 282, "package": 380, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36314,7 +36314,7 @@ "fields": { "vulnerability": 282, "package": 381, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36323,7 +36323,7 @@ "fields": { "vulnerability": 283, "package": 382, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36332,7 +36332,7 @@ "fields": { "vulnerability": 283, "package": 383, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36341,7 +36341,7 @@ "fields": { "vulnerability": 284, "package": 384, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36350,7 +36350,7 @@ "fields": { "vulnerability": 285, "package": 385, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36359,7 +36359,7 @@ "fields": { "vulnerability": 286, "package": 386, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36368,7 +36368,7 @@ "fields": { "vulnerability": 287, "package": 387, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36377,7 +36377,7 @@ "fields": { "vulnerability": 288, "package": 388, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36386,7 +36386,7 @@ "fields": { "vulnerability": 289, "package": 389, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36395,7 +36395,7 @@ "fields": { "vulnerability": 290, "package": 390, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36404,7 +36404,7 @@ "fields": { "vulnerability": 291, "package": 391, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36413,7 +36413,7 @@ "fields": { "vulnerability": 292, "package": 392, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36422,7 +36422,7 @@ "fields": { "vulnerability": 293, "package": 393, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36431,7 +36431,7 @@ "fields": { "vulnerability": 294, "package": 394, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36440,7 +36440,7 @@ "fields": { "vulnerability": 295, "package": 395, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36449,7 +36449,7 @@ "fields": { "vulnerability": 296, "package": 396, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36458,7 +36458,7 @@ "fields": { "vulnerability": 297, "package": 397, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36467,7 +36467,7 @@ "fields": { "vulnerability": 298, "package": 398, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36476,7 +36476,7 @@ "fields": { "vulnerability": 299, "package": 399, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36485,7 +36485,7 @@ "fields": { "vulnerability": 300, "package": 400, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36494,7 +36494,7 @@ "fields": { "vulnerability": 301, "package": 401, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36503,7 +36503,7 @@ "fields": { "vulnerability": 302, "package": 402, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36512,7 +36512,7 @@ "fields": { "vulnerability": 303, "package": 403, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36521,7 +36521,7 @@ "fields": { "vulnerability": 303, "package": 404, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36530,7 +36530,7 @@ "fields": { "vulnerability": 303, "package": 405, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36539,7 +36539,7 @@ "fields": { "vulnerability": 304, "package": 406, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36548,7 +36548,7 @@ "fields": { "vulnerability": 305, "package": 407, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36557,7 +36557,7 @@ "fields": { "vulnerability": 306, "package": 408, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36566,7 +36566,7 @@ "fields": { "vulnerability": 307, "package": 409, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36575,7 +36575,7 @@ "fields": { "vulnerability": 308, "package": 410, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36584,7 +36584,7 @@ "fields": { "vulnerability": 309, "package": 411, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36593,7 +36593,7 @@ "fields": { "vulnerability": 310, "package": 412, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36602,7 +36602,7 @@ "fields": { "vulnerability": 311, "package": 413, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36611,7 +36611,7 @@ "fields": { "vulnerability": 312, "package": 414, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36620,7 +36620,7 @@ "fields": { "vulnerability": 313, "package": 415, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36629,7 +36629,7 @@ "fields": { "vulnerability": 314, "package": 416, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36638,7 +36638,7 @@ "fields": { "vulnerability": 315, "package": 417, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36647,7 +36647,7 @@ "fields": { "vulnerability": 316, "package": 418, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36656,7 +36656,7 @@ "fields": { "vulnerability": 317, "package": 419, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36665,7 +36665,7 @@ "fields": { "vulnerability": 318, "package": 420, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36674,7 +36674,7 @@ "fields": { "vulnerability": 319, "package": 421, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36683,7 +36683,7 @@ "fields": { "vulnerability": 320, "package": 422, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36692,7 +36692,7 @@ "fields": { "vulnerability": 321, "package": 423, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36701,7 +36701,7 @@ "fields": { "vulnerability": 322, "package": 424, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36710,7 +36710,7 @@ "fields": { "vulnerability": 323, "package": 425, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36719,7 +36719,7 @@ "fields": { "vulnerability": 323, "package": 426, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36728,7 +36728,7 @@ "fields": { "vulnerability": 323, "package": 427, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36737,7 +36737,7 @@ "fields": { "vulnerability": 324, "package": 428, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36746,7 +36746,7 @@ "fields": { "vulnerability": 325, "package": 429, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36755,7 +36755,7 @@ "fields": { "vulnerability": 325, "package": 430, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36764,7 +36764,7 @@ "fields": { "vulnerability": 326, "package": 431, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36773,7 +36773,7 @@ "fields": { "vulnerability": 326, "package": 432, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36782,7 +36782,7 @@ "fields": { "vulnerability": 327, "package": 433, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36791,7 +36791,7 @@ "fields": { "vulnerability": 328, "package": 434, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36800,7 +36800,7 @@ "fields": { "vulnerability": 329, "package": 435, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36809,7 +36809,7 @@ "fields": { "vulnerability": 330, "package": 436, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36818,7 +36818,7 @@ "fields": { "vulnerability": 331, "package": 437, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36827,7 +36827,7 @@ "fields": { "vulnerability": 332, "package": 438, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36836,7 +36836,7 @@ "fields": { "vulnerability": 333, "package": 439, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36845,7 +36845,7 @@ "fields": { "vulnerability": 334, "package": 440, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36854,7 +36854,7 @@ "fields": { "vulnerability": 335, "package": 441, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36863,7 +36863,7 @@ "fields": { "vulnerability": 336, "package": 442, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36872,7 +36872,7 @@ "fields": { "vulnerability": 337, "package": 443, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36881,7 +36881,7 @@ "fields": { "vulnerability": 338, "package": 444, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36890,7 +36890,7 @@ "fields": { "vulnerability": 338, "package": 445, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36899,7 +36899,7 @@ "fields": { "vulnerability": 338, "package": 446, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36908,7 +36908,7 @@ "fields": { "vulnerability": 338, "package": 447, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36917,7 +36917,7 @@ "fields": { "vulnerability": 338, "package": 448, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36926,7 +36926,7 @@ "fields": { "vulnerability": 338, "package": 449, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36935,7 +36935,7 @@ "fields": { "vulnerability": 339, "package": 450, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36944,7 +36944,7 @@ "fields": { "vulnerability": 339, "package": 451, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36953,7 +36953,7 @@ "fields": { "vulnerability": 339, "package": 452, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36962,7 +36962,7 @@ "fields": { "vulnerability": 339, "package": 453, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36971,7 +36971,7 @@ "fields": { "vulnerability": 339, "package": 454, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36980,7 +36980,7 @@ "fields": { "vulnerability": 339, "package": 455, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36989,7 +36989,7 @@ "fields": { "vulnerability": 340, "package": 456, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -36998,7 +36998,7 @@ "fields": { "vulnerability": 341, "package": 457, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37007,7 +37007,7 @@ "fields": { "vulnerability": 342, "package": 458, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37016,7 +37016,7 @@ "fields": { "vulnerability": 343, "package": 459, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37025,7 +37025,7 @@ "fields": { "vulnerability": 344, "package": 460, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37034,7 +37034,7 @@ "fields": { "vulnerability": 345, "package": 461, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37043,7 +37043,7 @@ "fields": { "vulnerability": 346, "package": 462, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37052,7 +37052,7 @@ "fields": { "vulnerability": 347, "package": 463, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37061,7 +37061,7 @@ "fields": { "vulnerability": 348, "package": 464, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37070,7 +37070,7 @@ "fields": { "vulnerability": 349, "package": 465, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37079,7 +37079,7 @@ "fields": { "vulnerability": 350, "package": 466, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37088,7 +37088,7 @@ "fields": { "vulnerability": 351, "package": 467, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37097,7 +37097,7 @@ "fields": { "vulnerability": 352, "package": 468, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37106,7 +37106,7 @@ "fields": { "vulnerability": 353, "package": 469, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37115,7 +37115,7 @@ "fields": { "vulnerability": 354, "package": 470, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37124,7 +37124,7 @@ "fields": { "vulnerability": 355, "package": 471, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37133,7 +37133,7 @@ "fields": { "vulnerability": 356, "package": 472, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37142,7 +37142,7 @@ "fields": { "vulnerability": 357, "package": 473, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37151,7 +37151,7 @@ "fields": { "vulnerability": 357, "package": 474, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37160,7 +37160,7 @@ "fields": { "vulnerability": 357, "package": 475, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37169,7 +37169,7 @@ "fields": { "vulnerability": 357, "package": 476, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37178,7 +37178,7 @@ "fields": { "vulnerability": 357, "package": 477, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37187,7 +37187,7 @@ "fields": { "vulnerability": 357, "package": 478, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37196,7 +37196,7 @@ "fields": { "vulnerability": 358, "package": 479, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37205,7 +37205,7 @@ "fields": { "vulnerability": 358, "package": 480, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37214,7 +37214,7 @@ "fields": { "vulnerability": 359, "package": 481, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37223,7 +37223,7 @@ "fields": { "vulnerability": 360, "package": 482, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37232,7 +37232,7 @@ "fields": { "vulnerability": 361, "package": 483, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37241,7 +37241,7 @@ "fields": { "vulnerability": 361, "package": 484, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37250,7 +37250,7 @@ "fields": { "vulnerability": 362, "package": 485, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37259,7 +37259,7 @@ "fields": { "vulnerability": 363, "package": 486, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37268,7 +37268,7 @@ "fields": { "vulnerability": 364, "package": 487, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37277,7 +37277,7 @@ "fields": { "vulnerability": 365, "package": 488, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37286,7 +37286,7 @@ "fields": { "vulnerability": 366, "package": 489, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37295,7 +37295,7 @@ "fields": { "vulnerability": 367, "package": 490, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37304,7 +37304,7 @@ "fields": { "vulnerability": 367, "package": 491, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37313,7 +37313,7 @@ "fields": { "vulnerability": 368, "package": 492, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37322,7 +37322,7 @@ "fields": { "vulnerability": 368, "package": 493, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37331,7 +37331,7 @@ "fields": { "vulnerability": 369, "package": 494, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37340,7 +37340,7 @@ "fields": { "vulnerability": 369, "package": 495, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37349,7 +37349,7 @@ "fields": { "vulnerability": 370, "package": 496, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37358,7 +37358,7 @@ "fields": { "vulnerability": 371, "package": 497, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37367,7 +37367,7 @@ "fields": { "vulnerability": 371, "package": 498, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37376,7 +37376,7 @@ "fields": { "vulnerability": 371, "package": 499, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37385,7 +37385,7 @@ "fields": { "vulnerability": 372, "package": 500, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37394,7 +37394,7 @@ "fields": { "vulnerability": 372, "package": 501, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37403,7 +37403,7 @@ "fields": { "vulnerability": 372, "package": 502, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37412,7 +37412,7 @@ "fields": { "vulnerability": 373, "package": 503, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37421,7 +37421,7 @@ "fields": { "vulnerability": 373, "package": 504, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37430,7 +37430,7 @@ "fields": { "vulnerability": 373, "package": 505, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37439,7 +37439,7 @@ "fields": { "vulnerability": 374, "package": 506, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37448,7 +37448,7 @@ "fields": { "vulnerability": 374, "package": 507, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37457,7 +37457,7 @@ "fields": { "vulnerability": 374, "package": 508, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37466,7 +37466,7 @@ "fields": { "vulnerability": 375, "package": 509, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37475,7 +37475,7 @@ "fields": { "vulnerability": 375, "package": 510, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37484,7 +37484,7 @@ "fields": { "vulnerability": 375, "package": 511, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37493,7 +37493,7 @@ "fields": { "vulnerability": 376, "package": 512, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37502,7 +37502,7 @@ "fields": { "vulnerability": 376, "package": 513, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37511,7 +37511,7 @@ "fields": { "vulnerability": 376, "package": 514, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37520,7 +37520,7 @@ "fields": { "vulnerability": 377, "package": 515, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37529,7 +37529,7 @@ "fields": { "vulnerability": 377, "package": 516, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37538,7 +37538,7 @@ "fields": { "vulnerability": 377, "package": 517, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37547,7 +37547,7 @@ "fields": { "vulnerability": 378, "package": 518, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37556,7 +37556,7 @@ "fields": { "vulnerability": 379, "package": 519, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37565,7 +37565,7 @@ "fields": { "vulnerability": 380, "package": 520, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37574,7 +37574,7 @@ "fields": { "vulnerability": 381, "package": 521, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37583,7 +37583,7 @@ "fields": { "vulnerability": 382, "package": 522, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37592,7 +37592,7 @@ "fields": { "vulnerability": 383, "package": 523, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37601,7 +37601,7 @@ "fields": { "vulnerability": 384, "package": 524, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37610,7 +37610,7 @@ "fields": { "vulnerability": 385, "package": 525, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37619,7 +37619,7 @@ "fields": { "vulnerability": 386, "package": 526, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37628,7 +37628,7 @@ "fields": { "vulnerability": 387, "package": 527, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37637,7 +37637,7 @@ "fields": { "vulnerability": 388, "package": 528, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37646,7 +37646,7 @@ "fields": { "vulnerability": 389, "package": 529, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37655,7 +37655,7 @@ "fields": { "vulnerability": 390, "package": 530, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37664,7 +37664,7 @@ "fields": { "vulnerability": 391, "package": 531, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37673,7 +37673,7 @@ "fields": { "vulnerability": 392, "package": 532, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37682,7 +37682,7 @@ "fields": { "vulnerability": 393, "package": 533, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37691,7 +37691,7 @@ "fields": { "vulnerability": 394, "package": 534, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37700,7 +37700,7 @@ "fields": { "vulnerability": 395, "package": 535, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37709,7 +37709,7 @@ "fields": { "vulnerability": 396, "package": 536, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37718,7 +37718,7 @@ "fields": { "vulnerability": 397, "package": 537, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37727,7 +37727,7 @@ "fields": { "vulnerability": 397, "package": 538, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37736,7 +37736,7 @@ "fields": { "vulnerability": 398, "package": 539, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37745,7 +37745,7 @@ "fields": { "vulnerability": 399, "package": 540, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37754,7 +37754,7 @@ "fields": { "vulnerability": 400, "package": 541, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37763,7 +37763,7 @@ "fields": { "vulnerability": 401, "package": 542, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37772,7 +37772,7 @@ "fields": { "vulnerability": 402, "package": 543, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37781,7 +37781,7 @@ "fields": { "vulnerability": 403, "package": 544, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37790,7 +37790,7 @@ "fields": { "vulnerability": 404, "package": 545, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37799,7 +37799,7 @@ "fields": { "vulnerability": 405, "package": 546, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37808,7 +37808,7 @@ "fields": { "vulnerability": 406, "package": 547, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37817,7 +37817,7 @@ "fields": { "vulnerability": 407, "package": 548, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37826,7 +37826,7 @@ "fields": { "vulnerability": 408, "package": 549, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37835,7 +37835,7 @@ "fields": { "vulnerability": 409, "package": 550, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37844,7 +37844,7 @@ "fields": { "vulnerability": 410, "package": 551, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37853,7 +37853,7 @@ "fields": { "vulnerability": 411, "package": 552, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37862,7 +37862,7 @@ "fields": { "vulnerability": 411, "package": 553, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37871,7 +37871,7 @@ "fields": { "vulnerability": 411, "package": 554, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37880,7 +37880,7 @@ "fields": { "vulnerability": 412, "package": 555, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37889,7 +37889,7 @@ "fields": { "vulnerability": 413, "package": 556, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37898,7 +37898,7 @@ "fields": { "vulnerability": 414, "package": 557, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37907,7 +37907,7 @@ "fields": { "vulnerability": 415, "package": 558, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37916,7 +37916,7 @@ "fields": { "vulnerability": 416, "package": 559, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37925,7 +37925,7 @@ "fields": { "vulnerability": 416, "package": 560, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37934,7 +37934,7 @@ "fields": { "vulnerability": 417, "package": 561, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37943,7 +37943,7 @@ "fields": { "vulnerability": 417, "package": 562, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37952,7 +37952,7 @@ "fields": { "vulnerability": 418, "package": 563, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37961,7 +37961,7 @@ "fields": { "vulnerability": 419, "package": 564, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37970,7 +37970,7 @@ "fields": { "vulnerability": 420, "package": 565, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37979,7 +37979,7 @@ "fields": { "vulnerability": 421, "package": 566, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37988,7 +37988,7 @@ "fields": { "vulnerability": 422, "package": 567, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -37997,7 +37997,7 @@ "fields": { "vulnerability": 423, "package": 568, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38006,7 +38006,7 @@ "fields": { "vulnerability": 424, "package": 569, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38015,7 +38015,7 @@ "fields": { "vulnerability": 425, "package": 570, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38024,7 +38024,7 @@ "fields": { "vulnerability": 426, "package": 571, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38033,7 +38033,7 @@ "fields": { "vulnerability": 427, "package": 572, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38042,7 +38042,7 @@ "fields": { "vulnerability": 428, "package": 573, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38051,7 +38051,7 @@ "fields": { "vulnerability": 429, "package": 574, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38060,7 +38060,7 @@ "fields": { "vulnerability": 430, "package": 575, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38069,7 +38069,7 @@ "fields": { "vulnerability": 431, "package": 576, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38078,7 +38078,7 @@ "fields": { "vulnerability": 431, "package": 577, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38087,7 +38087,7 @@ "fields": { "vulnerability": 432, "package": 578, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38096,7 +38096,7 @@ "fields": { "vulnerability": 432, "package": 579, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38105,7 +38105,7 @@ "fields": { "vulnerability": 433, "package": 580, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38114,7 +38114,7 @@ "fields": { "vulnerability": 434, "package": 581, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38123,7 +38123,7 @@ "fields": { "vulnerability": 435, "package": 582, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38132,7 +38132,7 @@ "fields": { "vulnerability": 436, "package": 583, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38141,7 +38141,7 @@ "fields": { "vulnerability": 437, "package": 584, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38150,7 +38150,7 @@ "fields": { "vulnerability": 437, "package": 585, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38159,7 +38159,7 @@ "fields": { "vulnerability": 438, "package": 586, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38168,7 +38168,7 @@ "fields": { "vulnerability": 439, "package": 587, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38177,7 +38177,7 @@ "fields": { "vulnerability": 440, "package": 588, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38186,7 +38186,7 @@ "fields": { "vulnerability": 440, "package": 589, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38195,7 +38195,7 @@ "fields": { "vulnerability": 440, "package": 590, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38204,7 +38204,7 @@ "fields": { "vulnerability": 441, "package": 591, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38213,7 +38213,7 @@ "fields": { "vulnerability": 441, "package": 592, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38222,7 +38222,7 @@ "fields": { "vulnerability": 441, "package": 593, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38231,7 +38231,7 @@ "fields": { "vulnerability": 442, "package": 594, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38240,7 +38240,7 @@ "fields": { "vulnerability": 443, "package": 595, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38249,7 +38249,7 @@ "fields": { "vulnerability": 444, "package": 596, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38258,7 +38258,7 @@ "fields": { "vulnerability": 445, "package": 597, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38267,7 +38267,7 @@ "fields": { "vulnerability": 446, "package": 598, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38276,7 +38276,7 @@ "fields": { "vulnerability": 447, "package": 599, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38285,7 +38285,7 @@ "fields": { "vulnerability": 448, "package": 600, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38294,7 +38294,7 @@ "fields": { "vulnerability": 449, "package": 601, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38303,7 +38303,7 @@ "fields": { "vulnerability": 450, "package": 602, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38312,7 +38312,7 @@ "fields": { "vulnerability": 451, "package": 603, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38321,7 +38321,7 @@ "fields": { "vulnerability": 452, "package": 604, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38330,7 +38330,7 @@ "fields": { "vulnerability": 452, "package": 605, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38339,7 +38339,7 @@ "fields": { "vulnerability": 452, "package": 606, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38348,7 +38348,7 @@ "fields": { "vulnerability": 453, "package": 607, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38357,7 +38357,7 @@ "fields": { "vulnerability": 454, "package": 608, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38366,7 +38366,7 @@ "fields": { "vulnerability": 454, "package": 609, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38375,7 +38375,7 @@ "fields": { "vulnerability": 455, "package": 610, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38384,7 +38384,7 @@ "fields": { "vulnerability": 455, "package": 611, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38393,7 +38393,7 @@ "fields": { "vulnerability": 456, "package": 612, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38402,7 +38402,7 @@ "fields": { "vulnerability": 457, "package": 613, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38411,7 +38411,7 @@ "fields": { "vulnerability": 458, "package": 614, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38420,7 +38420,7 @@ "fields": { "vulnerability": 459, "package": 615, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38429,7 +38429,7 @@ "fields": { "vulnerability": 460, "package": 616, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38438,7 +38438,7 @@ "fields": { "vulnerability": 461, "package": 617, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38447,7 +38447,7 @@ "fields": { "vulnerability": 462, "package": 618, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38456,7 +38456,7 @@ "fields": { "vulnerability": 463, "package": 619, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38465,7 +38465,7 @@ "fields": { "vulnerability": 464, "package": 620, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38474,7 +38474,7 @@ "fields": { "vulnerability": 465, "package": 621, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38483,7 +38483,7 @@ "fields": { "vulnerability": 466, "package": 622, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38492,7 +38492,7 @@ "fields": { "vulnerability": 467, "package": 623, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38501,7 +38501,7 @@ "fields": { "vulnerability": 468, "package": 624, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38510,7 +38510,7 @@ "fields": { "vulnerability": 468, "package": 625, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38519,7 +38519,7 @@ "fields": { "vulnerability": 468, "package": 626, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38528,7 +38528,7 @@ "fields": { "vulnerability": 469, "package": 627, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38537,7 +38537,7 @@ "fields": { "vulnerability": 470, "package": 628, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38546,7 +38546,7 @@ "fields": { "vulnerability": 471, "package": 629, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38555,7 +38555,7 @@ "fields": { "vulnerability": 472, "package": 630, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38564,7 +38564,7 @@ "fields": { "vulnerability": 473, "package": 631, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38573,7 +38573,7 @@ "fields": { "vulnerability": 474, "package": 632, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38582,7 +38582,7 @@ "fields": { "vulnerability": 475, "package": 633, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38591,7 +38591,7 @@ "fields": { "vulnerability": 476, "package": 634, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38600,7 +38600,7 @@ "fields": { "vulnerability": 477, "package": 635, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38609,7 +38609,7 @@ "fields": { "vulnerability": 478, "package": 636, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38618,7 +38618,7 @@ "fields": { "vulnerability": 479, "package": 637, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38627,7 +38627,7 @@ "fields": { "vulnerability": 480, "package": 638, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38636,7 +38636,7 @@ "fields": { "vulnerability": 481, "package": 639, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38645,7 +38645,7 @@ "fields": { "vulnerability": 482, "package": 640, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38654,7 +38654,7 @@ "fields": { "vulnerability": 483, "package": 641, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38663,7 +38663,7 @@ "fields": { "vulnerability": 484, "package": 642, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38672,7 +38672,7 @@ "fields": { "vulnerability": 485, "package": 643, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38681,7 +38681,7 @@ "fields": { "vulnerability": 485, "package": 644, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38690,7 +38690,7 @@ "fields": { "vulnerability": 486, "package": 645, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38699,7 +38699,7 @@ "fields": { "vulnerability": 486, "package": 646, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38708,7 +38708,7 @@ "fields": { "vulnerability": 487, "package": 647, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38717,7 +38717,7 @@ "fields": { "vulnerability": 487, "package": 648, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38726,7 +38726,7 @@ "fields": { "vulnerability": 487, "package": 649, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38735,7 +38735,7 @@ "fields": { "vulnerability": 487, "package": 650, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38744,7 +38744,7 @@ "fields": { "vulnerability": 487, "package": 651, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38753,7 +38753,7 @@ "fields": { "vulnerability": 488, "package": 652, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38762,7 +38762,7 @@ "fields": { "vulnerability": 489, "package": 653, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38771,7 +38771,7 @@ "fields": { "vulnerability": 489, "package": 654, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38780,7 +38780,7 @@ "fields": { "vulnerability": 490, "package": 655, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38789,7 +38789,7 @@ "fields": { "vulnerability": 490, "package": 656, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38798,7 +38798,7 @@ "fields": { "vulnerability": 490, "package": 657, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38807,7 +38807,7 @@ "fields": { "vulnerability": 490, "package": 658, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38816,7 +38816,7 @@ "fields": { "vulnerability": 490, "package": 659, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38825,7 +38825,7 @@ "fields": { "vulnerability": 491, "package": 660, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38834,7 +38834,7 @@ "fields": { "vulnerability": 492, "package": 661, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38843,7 +38843,7 @@ "fields": { "vulnerability": 493, "package": 662, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38852,7 +38852,7 @@ "fields": { "vulnerability": 493, "package": 663, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38861,7 +38861,7 @@ "fields": { "vulnerability": 494, "package": 664, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38870,7 +38870,7 @@ "fields": { "vulnerability": 494, "package": 665, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38879,7 +38879,7 @@ "fields": { "vulnerability": 495, "package": 666, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38888,7 +38888,7 @@ "fields": { "vulnerability": 496, "package": 667, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38897,7 +38897,7 @@ "fields": { "vulnerability": 496, "package": 668, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38906,7 +38906,7 @@ "fields": { "vulnerability": 497, "package": 669, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38915,7 +38915,7 @@ "fields": { "vulnerability": 497, "package": 670, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38924,7 +38924,7 @@ "fields": { "vulnerability": 498, "package": 671, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38933,7 +38933,7 @@ "fields": { "vulnerability": 498, "package": 672, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38942,7 +38942,7 @@ "fields": { "vulnerability": 499, "package": 673, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38951,7 +38951,7 @@ "fields": { "vulnerability": 499, "package": 674, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38960,7 +38960,7 @@ "fields": { "vulnerability": 500, "package": 675, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38969,7 +38969,7 @@ "fields": { "vulnerability": 500, "package": 676, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38978,7 +38978,7 @@ "fields": { "vulnerability": 501, "package": 677, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38987,7 +38987,7 @@ "fields": { "vulnerability": 501, "package": 678, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -38996,7 +38996,7 @@ "fields": { "vulnerability": 502, "package": 679, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39005,7 +39005,7 @@ "fields": { "vulnerability": 502, "package": 680, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39014,7 +39014,7 @@ "fields": { "vulnerability": 503, "package": 681, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39023,7 +39023,7 @@ "fields": { "vulnerability": 503, "package": 682, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39032,7 +39032,7 @@ "fields": { "vulnerability": 504, "package": 683, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39041,7 +39041,7 @@ "fields": { "vulnerability": 504, "package": 684, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39050,7 +39050,7 @@ "fields": { "vulnerability": 505, "package": 685, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39059,7 +39059,7 @@ "fields": { "vulnerability": 505, "package": 686, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39068,7 +39068,7 @@ "fields": { "vulnerability": 506, "package": 687, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39077,7 +39077,7 @@ "fields": { "vulnerability": 507, "package": 688, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39086,7 +39086,7 @@ "fields": { "vulnerability": 508, "package": 689, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39095,7 +39095,7 @@ "fields": { "vulnerability": 509, "package": 690, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39104,7 +39104,7 @@ "fields": { "vulnerability": 510, "package": 691, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39113,7 +39113,7 @@ "fields": { "vulnerability": 511, "package": 692, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39122,7 +39122,7 @@ "fields": { "vulnerability": 512, "package": 693, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39131,7 +39131,7 @@ "fields": { "vulnerability": 513, "package": 694, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39140,7 +39140,7 @@ "fields": { "vulnerability": 514, "package": 695, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39149,7 +39149,7 @@ "fields": { "vulnerability": 515, "package": 696, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39158,7 +39158,7 @@ "fields": { "vulnerability": 516, "package": 697, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39167,7 +39167,7 @@ "fields": { "vulnerability": 517, "package": 698, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39176,7 +39176,7 @@ "fields": { "vulnerability": 518, "package": 699, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39185,7 +39185,7 @@ "fields": { "vulnerability": 518, "package": 700, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39194,7 +39194,7 @@ "fields": { "vulnerability": 518, "package": 701, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39203,7 +39203,7 @@ "fields": { "vulnerability": 519, "package": 702, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39212,7 +39212,7 @@ "fields": { "vulnerability": 519, "package": 703, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39221,7 +39221,7 @@ "fields": { "vulnerability": 519, "package": 704, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39230,7 +39230,7 @@ "fields": { "vulnerability": 520, "package": 705, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39239,7 +39239,7 @@ "fields": { "vulnerability": 521, "package": 706, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39248,7 +39248,7 @@ "fields": { "vulnerability": 521, "package": 707, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39257,7 +39257,7 @@ "fields": { "vulnerability": 521, "package": 708, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39266,7 +39266,7 @@ "fields": { "vulnerability": 522, "package": 709, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39275,7 +39275,7 @@ "fields": { "vulnerability": 523, "package": 710, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39284,7 +39284,7 @@ "fields": { "vulnerability": 523, "package": 711, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39293,7 +39293,7 @@ "fields": { "vulnerability": 524, "package": 712, - "is_vulnerable": true + "is_vulnerable": false } }, { @@ -39302,7 +39302,7 @@ "fields": { "vulnerability": 525, "package": 713, - "is_vulnerable": true + "is_vulnerable": false } }, { diff --git a/vulnerabilities/models.py b/vulnerabilities/models.py index d09f8a6d8..b96f49ab4 100644 --- a/vulnerabilities/models.py +++ b/vulnerabilities/models.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# Copyright (c) nexB Inc. and others. All rights reserved. # http://nexb.com and https://github.com/nexB/vulnerablecode/ # The VulnerableCode software is licensed under the Apache License version 2.0. # Data generated with VulnerableCode require an acknowledgment. @@ -18,7 +18,7 @@ # OR CONDITIONS OF ANY KIND, either express or implied. No content created from # VulnerableCode should be considered or used as legal advice. Consult an Attorney # for any legal advice. -# VulnerableCode is a free software code scanning tool from nexB Inc. and others. +# VulnerableCode is a free software tool from nexB Inc. and others. # Visit https://github.com/nexB/vulnerablecode/ for support and download. import importlib @@ -39,25 +39,28 @@ class Vulnerability(models.Model): A software vulnerability with minimal information. Identifiers other than CVE ID are stored as VulnerabilityReference. """ - cve_id = models.CharField( - max_length=50, help_text='CVE ID', unique=True, null=True) - summary = models.TextField( - help_text='Summary of the vulnerability', blank=True) - cvss = models.FloatField(max_length=100, help_text='CVSS Score', null=True) + + cve_id = models.CharField(max_length=50, help_text="CVE ID", unique=True, null=True) + summary = models.TextField(help_text="Summary of the vulnerability", blank=True) + cvss = models.FloatField(max_length=100, help_text="CVSS Score", null=True) @property def vulnerable_to(self): - return self.packagerelatedvulnerability_set.filter(is_vulnerable=True) + return self.package_set.filter( + packagerelatedvulnerability__is_vulnerable=True, + ) @property def resolved_to(self): - return self.packagerelatedvulnerability_set.filter(is_vulnerable=False) + return self.package_set.filter( + packagerelatedvulnerability__is_vulnerable=False, + ) def __str__(self): return self.cve_id or self.summary class Meta: - verbose_name_plural = 'Vulnerabilities' + verbose_name_plural = "Vulnerabilities" class VulnerabilityReference(models.Model): @@ -65,49 +68,54 @@ class VulnerabilityReference(models.Model): A reference to a vulnerability such as a security advisory from a Linux distribution or language package manager. """ - vulnerability = models.ForeignKey( - Vulnerability, on_delete=models.CASCADE) - source = models.CharField( - max_length=50, help_text='Source(s) name eg:NVD', blank=True) + + vulnerability = models.ForeignKey(Vulnerability, on_delete=models.CASCADE) + source = models.CharField(max_length=50, help_text="Source(s) name eg:NVD", blank=True) reference_id = models.CharField( - max_length=50, help_text='Reference ID, eg:DSA-4465-1', blank=True) - url = models.URLField( - max_length=1024, help_text='URL of Vulnerability data', blank=True) + max_length=50, help_text="Reference ID, eg:DSA-4465-1", blank=True + ) + url = models.URLField(max_length=1024, help_text="URL of Vulnerability data", blank=True) class Meta: - unique_together = ('vulnerability', 'source', 'reference_id', 'url') + unique_together = ("vulnerability", "source", "reference_id", "url") def __str__(self): - return f'{self.source} {self.reference_id} {self.url}' + return f"{self.source} {self.reference_id} {self.url}" class Package(PackageURLMixin): """ A software package with links to relevant vulnerabilities. """ + vulnerabilities = models.ManyToManyField( - to='Vulnerability', through='PackageRelatedVulnerability') + to="Vulnerability", through="PackageRelatedVulnerability" + ) @property def vulnerable_to(self): - return self.packagerelatedvulnerability_set.filter(is_vulnerable=True) + return self.vulnerabilities.filter( + packagerelatedvulnerability__is_vulnerable=True, + ) @property def resolved_to(self): - return self.packagerelatedvulnerability_set.filter(is_vulnerable=False) + return self.vulnerabilities.filter( + packagerelatedvulnerability__is_vulnerable=False, + ) class Meta: - unique_together = ('name', 'namespace', 'type', - 'version', 'qualifiers', 'subpath') + unique_together = ("name", "namespace", "type", "version", "qualifiers", "subpath") + # Remove the `qualifers` and `set_package_url` overrides after # https://github.com/package-url/packageurl-python/pull/35 gets merged qualifiers = pgfields.JSONField( default=dict, help_text=_( - 'Extra qualifying data for a package such as the name of an OS, ' - 'architecture, distro, etc.' + "Extra qualifying data for a package such as the name of an OS, " + "architecture, distro, etc." ), - null=True + null=True, ) def set_package_url(self, package_url): @@ -123,8 +131,7 @@ def set_package_url(self, package_url): model_field = self._meta.get_field(field_name) if value and len(value) > model_field.max_length: - raise ValidationError( - _('Value too long for field "{}".'.format(field_name))) + raise ValidationError(_('Value too long for field "{}".'.format(field_name))) setattr(self, field_name, value or None) @@ -142,7 +149,7 @@ class Meta: # Technically 'is_vulnerable' doesn't belong here. The idea is to # later filter out for a pairs of ('package', 'vulnerability') which have both # values of 'is_vulnerable' and ping the data providers to resolve such entries. - unique_together = ('package', 'vulnerability', 'is_vulnerable') + unique_together = ("package", "vulnerability", "is_vulnerable") class ImportProblem(models.Model): @@ -155,26 +162,23 @@ class Importer(models.Model): Metadata and pointer to the implementation for a source of vulnerability data (aka security advisories) """ - name = models.CharField(max_length=100, unique=True, - help_text='Name of the importer') + + name = models.CharField(max_length=100, unique=True, help_text="Name of the importer") license = models.CharField( - max_length=100, - blank=True, - help_text='License of the vulnerability data', + max_length=100, blank=True, help_text="License of the vulnerability data", ) - last_run = models.DateTimeField( - null=True, help_text='UTC Timestamp of the last run') + last_run = models.DateTimeField(null=True, help_text="UTC Timestamp of the last run") data_source = models.CharField( max_length=100, - help_text='Name of the data source implementation importable from vulnerabilities.importers' + help_text="Name of the data source implementation importable from vulnerabilities.importers", # nopep8 ) data_source_cfg = pgfields.JSONField( null=False, default=dict, - help_text='Implementation-specific configuration for the data source', + help_text="Implementation-specific configuration for the data source", ) def make_data_source(self, batch_size: int, cutoff_date: datetime = None) -> DataSource: @@ -184,7 +188,7 @@ def make_data_source(self, batch_size: int, cutoff_date: datetime = None) -> Dat batch_size - max. number of records to return on each iteration cutoff_date - optional timestamp of the oldest data to include in the import """ - importers_module = importlib.import_module('vulnerabilities.importers') + importers_module = importlib.import_module("vulnerabilities.importers") klass = getattr(importers_module, self.data_source) ds = klass( diff --git a/vulnerabilities/templates/vulnerability.html b/vulnerabilities/templates/vulnerability.html index 9e91c930f..b89474417 100644 --- a/vulnerabilities/templates/vulnerability.html +++ b/vulnerabilities/templates/vulnerability.html @@ -63,9 +63,9 @@