Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ea36954
Scrapes data from debian & ubuntu, dump it in the D#24
kartiksibal Jul 27, 2017
b007cb2
Update debian scraper and tests to include description #16
kartiksibal Jul 27, 2017
7825f98
Added docstrings & formatting changes #24
kartiksibal Jul 31, 2017
49d0a2c
Test cases for #24
kartiksibal Jul 31, 2017
f1a1e99
Use seperate methods to scrape and dump data #24
kartiksibal Jul 31, 2017
0334beb
Fixed pycodestyle error and re-worded variable names
kartiksibal Aug 1, 2017
9c413dc
Added test cases for data dump #24
kartiksibal Aug 1, 2017
58e33db
Remove pycodestyle errors #24
kartiksibal Aug 1, 2017
d3850bb
Moved data_dump to vulncode_app/
kartiksibal Aug 2, 2017
0a08cc4
Added test cases for ubuntu, test_models.py #24
kartiksibal Aug 3, 2017
4f2ffa3
Changed directory structure #24
kartiksibal Aug 3, 2017
f6cad6e
Updated models as required #24
kartiksibal Aug 3, 2017
cc42000
Updated data dumping code #24
kartiksibal Aug 3, 2017
ce03b49
Change test cases format #24
kartiksibal Aug 3, 2017
d5177f7
Removed null=true constraint #24
kartiksibal Aug 4, 2017
a23d916
Changed .get() to .get(,'') in scraper #24
kartiksibal Aug 4, 2017
f56a019
Update travis according to changed tests directory structure
kartiksibal Aug 4, 2017
bd66de2
Update travis to run Django based tests
kartiksibal Aug 4, 2017
6bcf992
Added Django in requirements.txt
kartiksibal Aug 4, 2017
184266f
Add before_script commands to run Django tests
kartiksibal Aug 4, 2017
218fffb
Update readme with steps to scrape data and save in the DB
kartiksibal Aug 4, 2017
931d539
Removed un-used variables #24
kartiksibal Aug 7, 2017
4e4dcff
Merge branch 'data_dump' of https://github.com/nexB/vulnerablecode in…
kartiksibal Aug 7, 2017
4698df0
Resolve merge conflicts #24
kartiksibal Aug 8, 2017
9906a43
Remove unique together on package #24
kartiksibal Aug 8, 2017
a994a23
Merge branch 'develop' into data_dump
kartiksibal Aug 8, 2017
85bd950
Clean the code before merge #25
tdruez Aug 8, 2017
26fa349
Remove extra blank line #25
tdruez Aug 8, 2017
20ee1f9
Remove makemigrations from travis #24
kartiksibal Aug 8, 2017
efedb24
Convert double quotes to single quotes #24
kartiksibal Aug 8, 2017
1716de9
Merge branch 'data_dump' of https://github.com/nexB/vulnerablecode in…
kartiksibal Aug 8, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,14 @@
# Application definition

INSTALLED_APPS = [
'vulncode_app.apps.VulncodeAppConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this blank line?

]

MIDDLEWARE = [
Expand Down
75 changes: 75 additions & 0 deletions app/vulncode_app/data_dump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#
# Copyright (c) 2017 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.
#
# You may not use this software except in compliance with the License.
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
# derivative work, you must accompany this data with the following acknowledgment:
#
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
# 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.
# Visit https://github.com/nexB/vulnerablecode/ for support and download.

from vulncode_app.models import Vulnerability

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove un-used imports

from vulncode_app.models import VulnerabilityReference
from vulncode_app.models import ImpactedPackage
from vulncode_app.models import ResolvedPackage
from vulncode_app.models import Package
from vulncode_app.models import PackageReference

from scraper import debian, ubuntu


def debian_data():

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in the scraper/debian.py module, for consistency with https://github.com/nexB/vulnerablecode/blob/develop/scraper/ubuntu.py#L50

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdruez Valid point. 👍

"""
Scrape debian' security tracker.
"""
json_data = debian.json_data()
extract_data = debian.extract_data(json_data)

return extract_data


def debian_dump(extract_data):
"""
Save data scraped from Debian' security tracker.
"""
for data in extract_data:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could use ModelClass.objects.create() instead of save() for simplicity.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, I doubt the following objects creation works, the required fields are not properly set.

@kartiksibal kartiksibal Aug 2, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdruez Could you elaborate this? Are you talking in context to models.py?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example: Vulnerability.objects.create(summary="Affected package xyz")
-> django.db.utils.IntegrityError: NOT NULL constraint failed: vulncode_app_vulnerability.cvss
Since the cvss is not a nullable field, and since you do not set a value for it, your save() cannot work

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdruez Yes, I get your point. I'll add the updated models along the next commit.

vulnerability = Vulnerability(summary=data.get('description'))
vulnerability_reference = VulnerabilityReference(reference_id=data.get('vulnerability_id'))
package = Package(name=data.get('package_name'), version=data.get('fixed_version'))

vulnerability.save()
vulnerability_reference.save()
package.save()


def ubuntu_data():

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is un-needed, just call ubuntu.scrape_cves() in the ubuntu_dump() function.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdruez gotcha 👍

"""
Scrape Ubuntu' main security tracker.
"""
data = ubuntu.scrape_cves()
return data


def ubuntu_dump():
"""
Dump data scraped from Ubuntu's security tracker.
"""
for data in extract_data:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You did not run the tests ;) where could extract_data come from?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I cannot see a parameter in https://github.com/nexB/vulnerablecode/pull/25/files#diff-102b650ccd1cc2cb42f5359f5101e8e1R66
def ubuntu_dump(): .... there is no args: hence I can only conclude that the code has never be run or tested ;)

vulnerability_reference = VulnerabilityReference(reference_id=data.get('cve_id'))
package = ImpactedPackage(name=data.get('package_name'))

vulnerability_reference.save()
package.save()
59 changes: 59 additions & 0 deletions app/vulncode_app/test_data_dump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#
# Copyright (c) 2017 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.
#
# You may not use this software except in compliance with the License.
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
# derivative work, you must accompany this data with the following acknowledgment:
#
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
# 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.
# Visit https://github.com/nexB/vulnerablecode/ for support and download.

from django.test import TestCase

from vulncode_app.models import Vulnerability
from vulncode_app.models import VulnerabilityReference
from vulncode_app.models import Package
from vulncode_app.data_dump import debian_dump

import json

from scraper import debian


class TestDataDump(TestCase):
def test_data_dump(self):
"""
Scrape data from Debian' main tracker, dump it
in the database and verify entries.
"""
with open("tests/test_data/debian.json") as f:
test_data = json.loads(f.read())

extract_data = debian.extract_data(test_data)
data_dump = debian_dump(extract_data)

for i in range(3):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why limit yourself to 3?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But why doing three iterations?

@kartiksibal kartiksibal Aug 2, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne I was iterating over extract_data and incrementing pk. To match the expected data with the data we are getting. And since we have three entries, in the test data. Hence, 3

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not a robust approach for testing. Instead use a query, this is an iterable that you can then handle. Never expect that the pk have a specific values.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne Got it. 👍

self.assertEqual(3, len(Vulnerability.objects.all()))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is the query in the range loop?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also you should not assert on all() but instead with a filter that select what you expect there.

@kartiksibal kartiksibal Aug 2, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne The query shouldn't be in the loop.
I'll update that. I'll factor in the second point.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne Since, we are testing the number of entries. Isn't .all() a requirement here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main point was not to make that test three times in a range loop.
As far all is concerned, that is fine to count, but then use count() not all()

@kartiksibal kartiksibal Aug 3, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gotcha 👍
I have addressed your first point.

Well there is no loop anymore. So, the root is gone.

self.assertEqual(3, len(VulnerabilityReference.objects.all()))
self.assertEqual(3, len(Package.objects.all()))
self.assertEqual(extract_data[i].get('description'),
Vulnerability.objects.get(pk=i+1).summary)
self.assertEqual(extract_data[i].get('vulnerability_id'),
VulnerabilityReference.objects.get(pk=i+1).reference_id)
self.assertEqual(extract_data[i].get('package_name'),
Package.objects.get(pk=i+1).name)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should do a query, not hope that the PK will be incremented linearly

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updating. 👍

self.assertEqual(extract_data[i].get('fixed_version'),
Package.objects.get(pk=i+1).version)
63 changes: 63 additions & 0 deletions app/vulncode_app/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#
# Copyright (c) 2017 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.
#
# You may not use this software except in compliance with the License.
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
# derivative work, you must accompany this data with the following acknowledgment:
#
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
# 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.
# Visit https://github.com/nexB/vulnerablecode/ for support and download.

from django.test import TestCase

from vulncode_app.models import Vulnerability

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, un-used import and un-used variable in that file.

from vulncode_app.models import VulnerabilityReference
from vulncode_app.models import ImpactedPackage
from vulncode_app.models import ResolvedPackage
from vulncode_app.models import Package
from vulncode_app.models import PackageReference


class TestVulnerability(TestCase):
def test_vulnerability(self):
summary_create = Vulnerability.objects.create(summary="Affected package xyz")
summary_get = Vulnerability.objects.get(pk=summary_create.pk)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un-used variable.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdruez test_models.py was just a trial method to test models, initially. I haven't updated it. I was under the impression that test_data_dump will suffice.

Will update this now. 👍


self.assertEqual(str(summary_create), "Affected package xyz")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not convert to a string. Instead test the attributes values here and in your other tests

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne Do you think we should be keeping test_models. Won't, test_data_dump suffice?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope, keep these tests

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and do not convert to str

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne Will update. 👍



class TestVulnerabilityReference(TestCase):
def test_vulnerability_reference(self):
ref_id_create = VulnerabilityReference.objects.create(reference_id="CVE-2017-8564")
ref_id_get = VulnerabilityReference.objects.get(pk=ref_id_create.pk)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un-used variable.


self.assertEqual(str(ref_id_create), "CVE-2017-8564")


class TestPackage(TestCase):
def test_package(self):
package_name_create = Package.objects.create(name="Firefox")
package_name_get = Package.objects.get(pk=package_name_create.pk)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un-used variable.


self.assertEqual(str(package_name_create), "Firefox")


class TestPackageReference(TestCase):
def test_package_reference(self):
platform_create = PackageReference.objects.create(platform="Maven")
platform_get = PackageReference.objects.get(pk=platform_create.pk)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un-used variable.


self.assertEqual(str(platform_create), "Maven")
62 changes: 62 additions & 0 deletions data_dump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#
# Copyright (c) 2017 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.
#
# You may not use this software except in compliance with the License.
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
# derivative work, you must accompany this data with the following acknowledgment:
#
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
# 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.
# Visit https://github.com/nexB/vulnerablecode/ for support and download.

from vulncode_app.models import Vulnerability
from vulncode_app.models import VulnerabilityReference
from vulncode_app.models import ImpactedPackage
from vulncode_app.models import ResolvedPackage
from vulncode_app.models import Package
from vulncode_app.models import PackageReference

from scraper import debian
from scraper import ubuntu


def debian_dump():

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add docstring

json_data = debian.json_data()
extracted_data = debian.extract_data(json_data)

for i, v in enumerate(extract_data):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you enumerate here at all? this code makes no sense at all.

@pombredanne pombredanne Jul 31, 2017

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You still need to process the comment I made above ;)

@kartiksibal kartiksibal Jul 31, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pombredanne I have removed enumerate?

vulnerability = Vulnerability(summary=extract_data[i].get('description'))
vulnerability_reference = VulnerabilityReference(
reference_id=extract_data[i].get('vulnerability_id'))
package = ImpactedPackage(name=extract_data[i].get('package'),
version=extract_data[i].get('fixed_version'))

vulnerability.save()
vulnerability_reference.save()
package.save()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the save() need to be in the loop...
Otherwise you are only saving the latest item. Add some tests that show that



def ubuntu_dump():

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add some docstring

data = ubuntu.scrape_cves()

for i, v in enumerate(extract_data):
vulnerability_reference = VulnerabilityReference(
reference_id=data[i].get('cve_id'))
package = ImpactedPackage(name=data[i].get('package_name'))

vulnerability_reference.save()
package.save()
2 changes: 1 addition & 1 deletion scraper/debian.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import json
from urllib.request import urlopen


DEBIAN_TRACKER_URL = 'https://security-tracker.debian.org/tracker/data/json'


Expand Down Expand Up @@ -60,6 +59,7 @@ def extract_data(debian_data, base_release='jessie'):
package_vulns.append({
'package_name': package_name,
'vulnerability_id': vulnerability,
'description': details.get('description'),
'status': release.get('status'),
'urgency': release.get('urgency'),
'fixed_version': release.get('fixed_version')
Expand Down
4 changes: 2 additions & 2 deletions tests/test_data/debian.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"CVE-2009-2458": {
"scope": "remote",
"debianbug": 537254,
"description": "Multiple stack-based buffer overflows in mimetex.cgi in mimeTeX, when downloaded before 20090713, allow remote attackers to execute arbitrary code via a TeX file with long (1) picture, (2) circle, or (3) input tags.",
"description": "Multiple stack-based buffer overflows in mimetex.cgi in mimeTeX",
"releases":
{"stretch":
{"status": "resolved",
Expand Down Expand Up @@ -34,7 +34,7 @@
"CVE-2009-2459":
{"scope": "un-remote",
"debianbug": 537254,
"description": "Multiple unspecified vulnerabilities in mimeTeX, when downloaded before 20090713, have unknown impact and attack vectors related to the (1) \\environ, (2) \\input, and (3) \\counter TeX directives.",
"description": "Multiple unspecified vulnerabilities in mimeTeX.",
"releases":
{"stretch":
{"status": "resolved",
Expand Down
11 changes: 7 additions & 4 deletions tests/test_scrapers.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,21 +71,24 @@ def test_debian_extract_data():
'package_name': 'mimetex',
'status': 'resolved',
'urgency': 'medium',
'vulnerability_id': 'CVE-2009-2458'
'vulnerability_id': 'CVE-2009-2458',
'description': 'Multiple stack-based buffer overflows in mimetex.cgi in mimeTeX'
},
{
'fixed_version': '1.50-1.1',
'package_name': 'mimetex',
'status': 'not-resolved',
'urgency': 'medium',
'vulnerability_id': 'CVE-2009-2459'
'vulnerability_id': 'CVE-2009-2459',
'description': 'Multiple unspecified vulnerabilities in mimeTeX.'
},
{
'fixed_version': None,
'package_name': 'git-repair',
'vulnerability_id': 'TEMP-0807341-84E914',
'description': None,
'status': 'open',
'urgency': 'unimportant',
'vulnerability_id': 'TEMP-0807341-84E914'
'fixed_version': None
}
]

Expand Down