Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
44f488f
add a PyPa importer , organize the code using a shared osv.py
ziadhany Jun 22, 2022
9ac6fa2
Try to make osv.py support multiple ecosystems.
ziadhany Jun 26, 2022
160ac87
fix the test
ziadhany Jun 26, 2022
ed28ebe
remove unnecessary logs
ziadhany Jun 28, 2022
55f4931
dedupe the aliases and fix the test .
ziadhany Jun 28, 2022
281f05c
Add URLs to CPEs
TG1999 Jun 29, 2022
59406a5
Merge pull request #785 from TG1999/cpe_url
TG1999 Jun 29, 2022
e538976
Add fixed packages in packages endpoint
TG1999 Jun 27, 2022
64d9dd7
Add filter for fixed packages in vulnerabilities endpoint
TG1999 Jun 28, 2022
1907ae4
Add tests for packages endpoint
TG1999 Jun 29, 2022
5e3cbe5
Add tests for vulnerability endpoint
TG1999 Jun 29, 2022
ceafdb1
Add docstring for queryset filter
TG1999 Jul 4, 2022
1edfb93
Add changelog
TG1999 Jul 4, 2022
49052d6
Merge pull request #784 from TG1999/api_fixed_packages
TG1999 Jul 4, 2022
451e38b
Bump lxml from 4.8.0 to 4.9.1
dependabot[bot] Jul 6, 2022
6ddb39b
Merge pull request #794 from nexB/dependabot/pip/lxml-4.9.1
TG1999 Jul 7, 2022
ef4fb74
Bump django from 4.0.4 to 4.0.6
dependabot[bot] Jul 7, 2022
a975194
Merge pull request #793 from nexB/dependabot/pip/django-4.0.6
TG1999 Jul 7, 2022
438bcc6
Add missing command to systemd timer example
pombredanne Jul 12, 2022
d24136a
Correct ReST syntax
pombredanne Jul 12, 2022
eee64c2
Merge pull request #797 from nexB/release-30-rc2-preparation
pombredanne Jul 22, 2022
d372aa9
Start new UI, add session variables for temporary API portion
johnmhoran Jul 27, 2022
fd02ff8
Merge branch 'main' into 798-new-ui
johnmhoran Jul 28, 2022
48cd069
Add version info for django-extensions
johnmhoran Jul 28, 2022
a6b702b
Remove django-extensions, start work on DB-based package search UI
johnmhoran Jul 29, 2022
562bf5c
Add/update pagination for package- and vulnerability-search results
johnmhoran Jul 29, 2022
9175740
Add joint package/purl search and favicon
johnmhoran Jul 30, 2022
c7a98c9
Update search forms and search results UI
johnmhoran Jul 31, 2022
3e49c06
Improve search and search results UI
johnmhoran Jul 31, 2022
a364250
Add new UI package detail page
johnmhoran Aug 2, 2022
071d888
Clean up comments etc.
johnmhoran Aug 2, 2022
389171f
Remove legacy views and templates and many other cleanup tasks
johnmhoran Aug 2, 2022
f140a0e
Update search functions/displays on landing page
johnmhoran Aug 3, 2022
845834d
Save testing code for the moment
johnmhoran Aug 4, 2022
5a63a19
Work on failing tests
johnmhoran Aug 4, 2022
935107a
Delete references to CPEs with empty URLs #818
TG1999 Aug 5, 2022
93bce45
Format code
pombredanne Aug 5, 2022
2670b03
Merge pull request #827 from TG1999/clean_migration
TG1999 Aug 5, 2022
8ccfacc
Fix failing tests, sort search results, add search box to search resu…
johnmhoran Aug 6, 2022
2956bc2
Merge branch 'main' into 798-new-ui
johnmhoran Aug 6, 2022
1fe3433
Paginate initial listings to display a small number of or records #819
TG1999 Aug 8, 2022
88d9df7
Work on package sorting and fixed-package identification
johnmhoran Aug 8, 2022
6e47d64
Add search to vulnerabilities results page
johnmhoran Aug 9, 2022
441852f
Add search to vulnerability details template
johnmhoran Aug 9, 2022
0c896aa
Add page_size_query_param and max_page_size option
TG1999 Aug 9, 2022
b63d0c0
Merge pull request #830 from TG1999/fix_pagination
TG1999 Aug 9, 2022
050d580
Move fixed_packages to vulnerabilities in packages endpoint #809
TG1999 Aug 9, 2022
4791113
Merge pull request #831 from TG1999/fixed_package_in_affected_by_vuln…
TG1999 Aug 9, 2022
ae871fb
Add affected/fixed package data to vulnerability details
johnmhoran Aug 11, 2022
34d46d5
Bump django from 4.0.6 to 4.0.7
dependabot[bot] Aug 11, 2022
9164cf5
Merge pull request #840 from nexB/dependabot/pip/django-4.0.7
pombredanne Aug 11, 2022
cda5c42
Update package and vulnerability details pages
johnmhoran Aug 11, 2022
30c7164
Add bulk search support for CPEs https://github.com/nexB/vulnerableco…
TG1999 Aug 15, 2022
3da43f0
Add CHANGELOG
TG1999 Aug 15, 2022
05505b5
Improve assertions in test
TG1999 Aug 15, 2022
c062c71
Merge pull request #844 from TG1999/bulk_search_cpe
tdruez Aug 15, 2022
773064e
Merge branch 'main' into 798-new-ui
johnmhoran Aug 15, 2022
0089933
Create new branch for ongoing UI work
johnmhoran Aug 16, 2022
45b1e19
Add authetication for API
TG1999 Aug 17, 2022
c1e9d2b
Add CHANGHELOG
TG1999 Aug 17, 2022
8deff24
Add tests
TG1999 Aug 17, 2022
357b37b
Address review comments
TG1999 Aug 17, 2022
82839fc
Remove authentication views
TG1999 Aug 17, 2022
0ff68fc
Merge pull request #848 from TG1999/auth
TG1999 Aug 17, 2022
96d446f
Fix typos in API
TG1999 Aug 17, 2022
41f3527
Merge pull request #853 from TG1999/fix_typos
TG1999 Aug 17, 2022
86f5769
Start UI refinement including replacing jQuery with JS
johnmhoran Aug 17, 2022
2bddc7f
Replace Bulma tabset jQuery with JavaScript
johnmhoran Aug 18, 2022
e84a76e
Add sorted alias column to vulnerability search results table
johnmhoran Aug 18, 2022
233f747
Replace style settings with classes, fix Jinja tag indentation
johnmhoran Aug 20, 2022
e0731ad
Bump version
pombredanne Aug 22, 2022
4c08328
Improve details UIs
johnmhoran Aug 22, 2022
cec8915
Merge branch 'main' into 798-refine-ui
johnmhoran Aug 23, 2022
fbb895a
Add url property to Alias model and implement
johnmhoran Aug 23, 2022
4ec2d93
Add prominent displays of search/resource to search results/details t…
johnmhoran Aug 24, 2022
c902c2f
Fix wrapping, position of Alias records in Vulnerability details temp…
johnmhoran Aug 24, 2022
a7e720e
Add is_vulnerable property in fixed packages
TG1999 Aug 25, 2022
d72c3b9
Merge pull request #869 from TG1999/is_vulnerable_package
TG1999 Aug 25, 2022
417b5ca
Reorganize package and vulnerability details templates #813
johnmhoran Aug 25, 2022
a157024
Merge branch 'main' into 798-refine-ui
johnmhoran Aug 25, 2022
e483618
Spell out vulnerability over vuln in forms #798
pombredanne Aug 29, 2022
f587d3c
Remove unused imports
pombredanne Aug 29, 2022
0d99c7d
Rename get_package_types() #798
pombredanne Aug 29, 2022
bfe5f91
Sort imports
pombredanne Aug 29, 2022
8cdbc7e
Remove unused function #798
pombredanne Aug 29, 2022
24724ff
Streamline views
pombredanne Aug 29, 2022
d0dd5b3
Implement initial set of RTD updates #885 #886 #887 #888
johnmhoran Aug 30, 2022
9881d3c
Check Sphinx syntax and formatting and correct as needed
johnmhoran Aug 30, 2022
e2276b1
Make minor change, commit and push to trigger RTD build
johnmhoran Aug 30, 2022
5d2a4c9
Add namespace filter in packages api endpoint
TG1999 Sep 1, 2022
25fd8b7
Streamline UI views, forms and templates #798
pombredanne Sep 1, 2022
25bea6b
Merge pull request #893 from TG1999/add_namespace_filter
pombredanne Sep 2, 2022
b0a1ee2
Merge branch 'main' into 798-refine-ui
pombredanne Sep 2, 2022
4d9bfa7
Merge pull request #847 from nexB/798-refine-ui
pombredanne Sep 2, 2022
318baa1
Drop unused aiohttp requirement
pombredanne Sep 2, 2022
7c5164f
Update changelog
pombredanne Sep 2, 2022
6ef57fd
Merge branch 'main' into update-rtd
johnmhoran Sep 2, 2022
00f99da
Fine-tune introduction.rst
johnmhoran Sep 2, 2022
9f89bca
Merge pull request #890 from nexB/update-rtd
johnmhoran Sep 2, 2022
a7c1e2d
Allow case insensitive search for VCIDs #875
TG1999 Sep 5, 2022
d36f12d
Add tests
TG1999 Sep 5, 2022
56c952f
Merge pull request #898 from TG1999/case_insensitive_search
TG1999 Sep 5, 2022
6a142cb
Make URLs mandatory for references #891
TG1999 Sep 5, 2022
bf17aa4
Merge pull request #899 from TG1999/ref_url_mandatory
TG1999 Sep 6, 2022
f82bbc3
Format UI templates
pombredanne Sep 6, 2022
1302761
Report Vulnerability severities correctly #904
pombredanne Sep 6, 2022
2ddfef2
Merge latest main branch
pombredanne Sep 7, 2022
87ebbf4
Updat test from form renaming
pombredanne Sep 7, 2022
b922c8f
Merge pull request #894 from nexB/798-refine-ui-improved
pombredanne Sep 7, 2022
2a70836
Migrate from VULCOID to VCID #811
TG1999 Sep 5, 2022
7c708e8
Use bulk_update() to speed up VCID migration #811
pombredanne Sep 8, 2022
1c14803
Add get_absolute_url to get models #907
pombredanne Sep 8, 2022
c8ba591
Refine navigation and URLs #907
pombredanne Sep 8, 2022
6504321
Merge latest main
pombredanne Sep 8, 2022
b8c1eea
Enable purl slug for package views #904
pombredanne Sep 8, 2022
cc2d2b8
Ensure all models have an ordering
pombredanne Sep 8, 2022
8bafcb6
Reorder tabs
pombredanne Sep 8, 2022
7bc640e
Load main.js only templates using tabs #908
pombredanne Sep 8, 2022
1ac1623
Bump virtualenv
pombredanne Sep 8, 2022
5e3b49e
Improve by adding CVE as Reference id if missing
pombredanne Apr 12, 2022
608d596
Bump release to 30.0.0rc5
pombredanne Sep 8, 2022
bed3e75
Add data license note in CHANGELOG
pombredanne Sep 8, 2022
175d2da
Correct docstring
pombredanne Sep 8, 2022
caa7268
Streamline migrations
pombredanne Sep 9, 2022
6d379d0
Make VulnerabilityReference.url unique #818
pombredanne Sep 9, 2022
cc4ff4d
Add minimal local backup/restore scripts
pombredanne Sep 9, 2022
6688cb6
Merge pull request #909 from nexB/prepare-release30
pombredanne Sep 9, 2022
5149543
Fix migrations
pombredanne Sep 9, 2022
cc6f47d
Bump version to 30.0.0rc6
pombredanne Sep 9, 2022
3856f05
Merge pull request #914 from nexB/prep-30-rc6
pombredanne Sep 9, 2022
d8d70e6
Merge remote-tracking branch 'ziadhany/osv' into main
pombredanne Sep 9, 2022
de7bcb5
Format and streamline OSV code
pombredanne Sep 9, 2022
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
50 changes: 41 additions & 9 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,48 +8,80 @@ Version v30.0.0
transform imported data and convert that in Vulnerabilities and Packages. Improvers can
also improve and refine imported and existing data as well as enrich data using external
data sources. The migration to this new architecture is under way and not all importers
are available. You can track the progress in this issue: https://github.com/nexB/vulnerablecode/issues/597
are available.
Because of these extensive changes, it is not possible to migrate existing imported
data to the new schema. You will need instead to restart imports from an empty database
or request access to the new vulnerablecode.io live instance.
or access the new public.vulnerablecode.io live instance. We also provide a database dump.

- You can track the progress of this refactoring in this issue:
https://github.com/nexB/vulnerablecode/issues/597

- We added new data sources including PYSEC, GitHub and GitLab.

- We improved the documentation including adding development examples for importers and improvers.

- We removed the ability to edit relationships from the UI. The UI is now read-only
and we will need to design a different UI for proper review and curation of vulnerabilities.
- We removed the ability to edit relationships from the UI. The UI is now read-only.

- We replace the web UI with a brand new UI based on the same overall look and feel as ScanCode.io.

- We added support for NixOS as a Linux deployment target.

- The aliases of a vulnerabily are reported in the API vulnerabilities/ endpoint


- There are breaking Changes at API level with changes in the data structure:

- in the /api/vulnerabilities/ endpoint:

- Rename `resolved_packages` to `fixed_packages`
- Rename `unresolved_packages` to `affected_packages`
- Rename `url` to `reference_url` in the reference list
- Add is_vulnerable property in fixed and affected_packages.

- in the /api/packages/ endpoint:

- Rename `unresolved_vulnerabilities` to `affected_by_vulnerabilities`
- Rename `resolved_vulnerabilities` to `fixing_vulnerabilities`
- Rename `url` to `reference_url` in the reference list
- Add new attribute `is_resolved`
- Add namespace filter

- We have provided backward compatibility for `url` and `unresolved_vulnerabilities` for now
- We have provided backward compatibility for `url` and `unresolved_vulnerabilities` for now.
These will be removed in the next major version and should be considered as deprecated.

- There is a new experimental cpe/ API endpoint to lookup for vulnerabilities by CPE and
- There is a new experimental `cpe/` API endpoint to lookup for vulnerabilities by CPE and
another aliases/ endpoint to lookup for vulnerabilities by aliases. These two endpoints will be
replaced by query parameters on the main vulnerabilities/ endpoint when stabilized.

- Added filters for vulnerabilities endpoint to get fixed packages in accordance
to the details given in filters: For example, when you call the endpoint this way
``/api/vulnerabilities?type=pypi&namespace=foo&name=bar``, you will receive only
fixed versioned purls of the type ``pypi``, namespace ``foo`` and name ``bar``.

- Package endpoint will give fixed packages of only those that
matches type, name, namespace, subpath and qualifiers of the package queried.

- Paginated initial listings to display a small number of records
and provided page per size with a maximum limit of 100 records per page.

- Add fixed packages in vulnerabilities details in packages endpoint.

- Add bulk search support for CPEs.

- Add authentication for REST API endpoint.
The autentication is disabled by default and can be enabled using the
VULNERABLECODEIO_REQUIRE_AUTHENTICATION settings.
When enabled, users have to authenticate using
their API Key in the REST API.
Users can be created using the Django "createsuperuser" management command.

- The data license is now CC-BY-SA-4.0 as this is the highest common
denominator license among all the data sources we collect and aggregate.


Other:

- we dropped calver to use a plain semver.
- we adopted vers and the new univers library to handle version ranges.
- We dropped calver to use a plain semver.
- We adopted vers and the new univers library to handle version ranges.


Version v20.10
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ sqlite:
@$(MAKE) migrate

run:
${MANAGE} runserver 8001 --noreload --insecure
${MANAGE} runserver 8001 --insecure

test:
@echo "-> Run the test suite"
Expand Down
2 changes: 1 addition & 1 deletion docs/source/command-line-interface.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Command Line Interface
The main entry point is Django's :guilabel:`manage.py` management commands.

``$ ./manage.py --help``
-----------------------
------------------------

Lists all sub-commands available, including Django built-in commands.
VulnerableCode's own commands are listed under the ``[vulnerabilities]`` section::
Expand Down
4 changes: 2 additions & 2 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
# -- Project information -----------------------------------------------------

project = "VulnerableCode"
copyright = "nexb Inc. and others"
author = "nexb Inc. and others"
copyright = "nexB Inc. and others"
author = "nexB Inc. and others"


# -- General configuration ---------------------------------------------------
Expand Down
6 changes: 6 additions & 0 deletions docs/source/importers_link.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. _importers_link:

Importers
=========

.. include:: ../../SOURCES.rst
6 changes: 2 additions & 4 deletions docs/source/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Local development installation
Supported Platforms
^^^^^^^^^^^^^^^^^^^

**VulnerableCode* has been tested and is supported on the following operating systems:
**VulnerableCode** has been tested and is supported on the following operating systems:

#. **Debian-based** Linux distributions
#. **macOS** 12.1 and up
Expand All @@ -122,7 +122,7 @@ Pre-installation Checklist

Before you install VulnerableCode, make sure you have the following prerequisites:

* **Python: 3.8+* found at https://www.python.org/downloads/
* **Python: 3.8+** found at https://www.python.org/downloads/
* **Git**: most recent release available at https://git-scm.com/
* **PostgreSQL**: release 10 or later found at https://www.postgresql.org/ or
https://postgresapp.com/ on macOS
Expand Down Expand Up @@ -212,8 +212,6 @@ application.
This setup is **not suitable for deployments** and **only supported for local
development**.

An overview of the web application usage is available at :ref:`user_interface`.


Upgrading
^^^^^^^^^
Expand Down
23 changes: 13 additions & 10 deletions docs/source/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ VulnerableCode is a work-in-progress towards a free and open vulnerabilities
database and the packages they impact and the tools to aggregate and correlate
these vulnerabilities.

Why VulnerableCode ?
---------------------
Why VulnerableCode?
-------------------

The existing solutions are commercial proprietary vulnerability databases, which
in itself does not make sense because the data is about FOSS (Free and Open
Expand All @@ -27,12 +27,12 @@ security issues because:
fundamental questions "Is package foo vulnerable" and "Is package foo
vulnerable to vulnerability bar?"

How does it work ?
-------------------
How does it work?
-----------------

VulnerableCode independently aggregates many software vulnerability data sources
and supports data re-creation in a decentralized fashion. These data sources
(see complete list `here <./SOURCES.rst>`_) include security advisories
(see complete list :ref:`here <importers_link>`) include security advisories
published by Linux and BSD distributions, application software package managers
and package repositories, FOSS projects, GitHub and more. Thanks to this
approach, the data is focused on specific ecosystems yet aggregated in a single
Expand All @@ -59,14 +59,17 @@ exposure due to various reasons like but not limited to the complicated
procedure to receive CVE ID or not able to classify a bug as a security
compromise.

Recent presentations:

- `Open Source Summit 2020 <https://github.com/nexB/vulnerablecode/blob/main/docs/Presentations/Why-Is-There-No-Free-Software-Vulnerability-Database-v1.0.pdf>`_
Is VulnerableCode being actively developed?
-------------------------------------------

Should I use VulnerableCode ?
-------------------------------
Yes -- VulnerableCode is a work in progress! Please stay in touch on our `Gitter channel <https://gitter.im/aboutcode-org/vulnerablecode>`_; and if you have any feedback, feel free to `enter an issue in our GitHub repo <https://github.com/nexB/vulnerablecode/issues>`_.

VulnerableCode is a work in progress project and will likely go through major changes. Please stay in touch on our `Gitter channel <https://gitter.im/aboutcode-org/vulnerablecode>`_

Recent presentations
--------------------

- `Open Source Summit 2020 <https://github.com/nexB/vulnerablecode/blob/main/docs/Presentations/Why-Is-There-No-Free-Software-Vulnerability-Database-v1.0.pdf>`_

.. Some of this documentation is borrowed from the metaflow documentation and is also
under Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion docs/source/misc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Here is an example::

[Service]
Type=oneshot
ExecStart=/path/to/venv/bin/python /path/to/vulnerablecode/manage.py import --all
ExecStart=/path/to/venv/bin/python /path/to/vulnerablecode/manage.py import --all && /path/to/venv/bin/python /path/to/vulnerablecode/manage.py improve --all

$ cat ~/.config/systemd/user/vulnerablecode.timer

Expand Down
33 changes: 16 additions & 17 deletions docs/source/reference_importer_overview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,33 @@
Importer Overview
==================

Importers are responsible to scrape vulnerability data from various data sources without creating
a complete relational model between vulnerabilites, their fixes and store them in a structured
fashion.
Importers are responsible for scraping vulnerability data such as vulnerabilities and their fixes
and for storing the scraped information in a structured fashion. The structured data created by the
importer then provides input to an improver (see :ref:`improver-overview`), which is responsible
for creating a relational model for vulnerabilities, affected packages and fixed packages.

All importer implementation related code is defined in :file:`vulnerabilites/importer.py`.
All importer implementation-related code is defined in :file:`vulnerabilites/importer.py`.

Whereas, the framework related code for actually invoking and processing the importers are
situated in :file:`vulnerabilites/import_runner.py`.
In addition, the framework-related code for actually invoking and processing the importers is
located in :file:`vulnerabilites/import_runner.py`.

The importers, after scraping, provide with ``AdvisoryData`` objects. These objects are then
The importers, after scraping, provide ``AdvisoryData`` objects. These objects are then
processed and inserted into the ``Advisory`` model.

While implementing an importer, it is important to make sure that the importer does not alter the
upstream data at all. Its only job is to convert the data from a data source into structured - yet
non relational - data. The importers must **not** be smart or performing trickeries
under the hood.
This ensures that we always have a *true* copy of an advisory without any speculations or
improvements.
upstream data at all. Its only job is to convert the data from a data source into structured -- yet
non-relational -- data. This ensures that we always have a *true* copy of an advisory without any
modifications.

As importers do not speculate and given that a lot of advisories publish version ranges of affected
Given that a lot of advisories publish version ranges of affected
packages, it is necessary to store those ranges in a structured manner. *Vers* was designed to
solve this problem. It has been implemented in the `univers <https://github.com/nexB/univers>`_
library whose development goes hand in hand with VulnerableCode.

The data imported by importers is not useful by itself, it must be processed into a relational
model. The version ranges are required to be dissolved into concrete ranges. These are achieved by
``Improvers``. For more, see: :ref:`improver-overview`
The data imported by importers is not useful by itself: it must be processed into a relational
model. The version ranges are required to be resolved into concrete ranges. These are achieved by
``Improvers`` (see :ref:`improver-overview` for details).

As of now, the following importers have been implemented in VulnerableCode
As of now, the following importers have been implemented in VulnerableCode:

.. include:: ../../SOURCES.rst
20 changes: 10 additions & 10 deletions docs/source/reference_improver_overview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,29 @@ Improver Overview
Improvers improve upon already imported data. They are responsible for creating a relational
model for vulnerabilites and packages.

An Improver is supposed to contain data points about a vulnerability and the relevant discrete
An Improver is intended to contain data points about a vulnerability and the relevant discrete
affected and fixed packages (in the form of `PackageURLs
<https://github.com/package-url/packageurl-python>`_).
There is no notion of version ranges here, all package versions must be explicitly specified.
As this concrete relationship might not always be absolutely correct, improvers supply with a
There is no notion of version ranges here; all package versions must be explicitly specified.
As this concrete relationship might not always be absolutely correct, improvers supply a
confidence score and only the record with the highest confidence against a vulnerability and package
relationship is stored in the database.

There are two categories of improvers:

- **Generic**: Improve upon some imported data irrespective of any importer. These improvers are
defined in :file:`vulnerabilites/improvers/`
defined in :file:`vulnerabilites/improvers/`.
- **Importer Specific**: Improve upon data imported by a specific importer. These are defined in the
corresponding importer file itself.

Both types of improvers internally work in a similar fashion. They indicate which ``Advisory`` they
are interested in and when supplied with those Advisories, they return Inferences.
An ``Inference`` is more explicit than an ``Advisory`` and is able to answer the questions like, "Is
package A vulnerable to Vulnerability B ?". Of course, there is some confidence attached with the
answer which could also be ``MAX_CONFIDENCE`` in certain cases.
An ``Inference`` is more explicit than an ``Advisory`` and is able to answer questions like "Is
package A vulnerable to Vulnerability B ?". Of course, there is some confidence attached to the
answer, which could also be ``MAX_CONFIDENCE`` in certain cases.

The possibilities with improvers is endless, they are not restricted to take one approach. Features
like *Time Travel* and *finding fix commits* could be Implemented as well.
The possibilities with improvers are endless; they are not restricted to take one approach. Features
like *Time Travel* and *finding fix commits* could be implemented as well.

You can find more in-code documentation about improvers in :file:`vulnerabilites/improver.py` and
the framework responsible for invoking these improvers in :file:`vulnerabilites/improve_runner.py`
the framework responsible for invoking these improvers in :file:`vulnerabilites/improve_runner.py`.
Loading