# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 0.28.0 (UNRELEASED)
### Added
- [Sparse crates.io index](https://blog.rust-lang.org/inside-rust/2023/01/30/cargo-sparse-protocol.html) is now supported. This dramatically speeds up the checks for yanked crates. This crate honors the [Cargo settings for the use of sparse index](https://doc.rust-lang.org/cargo/reference/config.html#registriescrates-ioprotocol), should you need to opt out. ([#923])
- Added directory locking and explicit locking controls to the API to avoid several processes modifying local data at the same time. ([#923], [#944])
- Added `affected` field to `Warning`, to communicate e.g. warnings specific to a particular platform. ([#964])
- Added `license` field to the advisory format in preparation for data import from GHSA. ([#682])
- Added a `CommitHash` type to represent git commit hashes independently from the git implementation used. ([#961])
### Changed
- Switched from OpenSSL to [rustls](https://crates.io/crates/rustls) as the TLS implementation. ([#923], [#925])
- Due to this change CPU platforms other than x86 and ARM are no longer supported. This issue is tracked as [#962](https://github.com/rustsec/rustsec/issues/962).
- The `fix` feature is not yet converted; enabling it will pull in OpenSSL.
- Switched from `libgit2` to `gitoxide` as the git implementation. ([#925])
- Switched from `crates-index` to `tame-index` for crates.io access. ([#923])
- Increased the minimum supported rust version to 1.67. ([#923])
### Removed
- Removed `rustsec::registry::Index` because it is impractically slow when the sparse crates.io index is used. Use `rustsec::registry::CachedIndex` instead. ([#923])
- Removed `rustsec::registry::CachedIndex.is_yanked()`. Use `.find_yanked()` instead. Checking a large number of crates at once is orders of magnitude faster when using the sparse index. ([#937])
- Removed many `From` implementations from `rustsec::Error` to avoid tying `rustsec` SemVer to that of dependency crates. This should result in less frequent SemVer bumps for `rustsec` in the future. ([#961])
### Fixed
- `rustsec` can now be used in Alpine Linux containers ([#466](https://github.com/rustsec/rustsec/issues/466)).
- Several users of `rustsec` running in parallel can now fetch Git repositories without races ([#490](https://github.com/rustsec/rustsec/issues/490)).
- Accessing Git repositories over SSH is now supported ([#292](https://github.com/rustsec/rustsec/issues/292)).
- Credential helpers to access private repositories are now supported [#555](https://github.com/rustsec/rustsec/issues/555).
- Fix an edge case in git source dependency resolution when dependencies differ only in their hash. ([#889])
[#682]: https://github.com/rustsec/rustsec/pull/682
[#889]: https://github.com/rustsec/rustsec/pull/889
[#905]: https://github.com/rustsec/rustsec/pull/905
[#923]: https://github.com/rustsec/rustsec/pull/923
[#925]: https://github.com/rustsec/rustsec/pull/925
[#937]: https://github.com/rustsec/rustsec/pull/937
[#944]: https://github.com/rustsec/rustsec/pull/944
[#961]: https://github.com/rustsec/rustsec/pull/961
[#964]: https://github.com/rustsec/rustsec/pull/964
## 0.27.0 (2023-05-10)
### Added
- Upgraded to `cargo-lock` v9.0.0, which enables support for sparse registries.
## 0.26.5 (2023-03-22)
### Changed
- Migrated to a maintained fork of `cargo-edit` v0.9.x to fix [CVE-2023-22742] in the transitive dependency `libgit2-sys` ([#831])
- Removed the experimental check for the presence of a signature on the advisory-db repository. It only verified the presence of a signature without checking for any particular key, so it provided no additional security. ([#816])
- Fixed a build failure with certain dependency versions on recent compilers due to failing type inference ([#836])
[CVE-2023-22742]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22742
[#816]: https://github.com/rustsec/rustsec/pull/816
[#831]: https://github.com/rustsec/rustsec/pull/831
[#836]: https://github.com/rustsec/rustsec/pull/836
## 0.26.4 (2022-11-15)
### Fixed
- `registry::CachedIndex` now correctly handles invalid semver versions in crates.io registry, which crates.io allows for some reason ([#762])
[#762]: https://github.com/rustsec/rustsec/pull/762
## 0.26.3 (2022-11-01)
### Added
- `registry::CachedIndex` which is orders of magnitude faster than `registry::Index` when scanning multiple `Cargo.lock` files or binaries ([#730])
[#730]: https://github.com/rustsec/rustsec/pull/730
## 0.26.2 (2022-08-15)
### Fixed
- Fixed `withdrawn` ([#642])
[#642]: https://github.com/RustSec/rustsec/pull/642
## 0.26.1 (2022-08-14)
### Changed
- Deprecate `yanked` ([#631])
[#631]: https://github.com/RustSec/rustsec/pull/631
## 0.26.0 (2022-05-21)
### Added
- `[advisory.source]` ([#541])
- `doc_cfg` annotations when building on docs.rs ([#571])
### Changed
- Bump `git2` dependency to v0.14; MSRV 1.57 ([#524])
- Bump `platforms` dependency to v3.0 ([#532])
- Update to 2021 edition ([#538])
- Use `Query::crate_scope()` as the `Default` ([#544])
- Bump `cvss` dependency to v2.0 ([#550])
- Bump `cargo-lock` dependency to v8.0 ([#561])
- Flatten `warnings` module; rename `WarningKind` ([#572])
- Flatten `advisory::id` module; rename `IdKind` ([#573])
### Removed
- Legacy database scopes ([#541])
[#524]: https://github.com/RustSec/rustsec/pull/524
[#532]: https://github.com/RustSec/rustsec/pull/532
[#538]: https://github.com/RustSec/rustsec/pull/538
[#541]: https://github.com/RustSec/rustsec/pull/541
[#544]: https://github.com/RustSec/rustsec/pull/544
[#550]: https://github.com/RustSec/rustsec/pull/550
[#561]: https://github.com/RustSec/rustsec/pull/561
[#571]: https://github.com/RustSec/rustsec/pull/571
[#572]: https://github.com/RustSec/rustsec/pull/572
[#573]: https://github.com/RustSec/rustsec/pull/573
## 0.25.1 (2021-11-15)
### Changed
- Bump `platforms` dependency to v2.0.0 ([#485])
[#485]: https://github.com/RustSec/rustsec/pull/485
## 0.25.0 (2021-11-12) [YANKED]
### Changed
- Bump `cargo-edit` dependency from 0.7.0 to 0.8.0 ([#439])
- Make `advisory::id::Kind` lowercase ([#471])
- Bump MSRV to 1.52 ([#476])
- Flatten API: make modules with one type non-`pub`; re-export type from parent ([#478])
[#439]: https://github.com/RustSec/rustsec/pull/439
[#471]: https://github.com/RustSec/rustsec/pull/471
[#476]: https://github.com/RustSec/rustsec/pull/476
[#478]: https://github.com/RustSec/rustsec/pull/478
## 0.24.3 (2021-09-11)
### Added
- `vendored-libgit2` feature ([#432])
### Changed
- OSV v1.0 ([#421])
[#421]: https://github.com/RustSec/rustsec/pull/421
[#432]: https://github.com/RustSec/rustsec/pull/432
## 0.24.2 (2021-07-20)
### Changed
- Support `~` and `=` operators in version specification ([#402])
- Bump `crates-index` from 0.16.7 to 0.17.0 ([#403])
[#402]: https://github.com/RustSec/rustsec/pull/402
[#403]: https://github.com/RustSec/rustsec/pull/403
## 0.24.1 (2021-07-02)
### Changed
- Do not lint year in CVE IDs ([#393])
[#393]: https://github.com/RustSec/rustsec/pull/393
## 0.24.0 (2021-06-28)
### Added
- OSV export ([#366])
### Changed
- Bump `cargo-lock` to v7.0 ([#379])
[#366]: https://github.com/RustSec/rustsec/pull/366
[#379]: https://github.com/RustSec/rustsec/pull/379
## 0.23.3 (2021-03-08)
### Fixed
- Workaround for stale git refs
## 0.23.2 (2021-03-07)
### Changed
- Rename advisory-db `master` branch to `main`
## 0.23.1 (2021-02-24)
### Fixed
- Parsing error on Windows
## 0.23.0 (2021-01-26)
### Added
- Advisory `references` as a URL list
- Support for omitting leading `[advisory]` table
- `thread-safety` category
### Changed
- Rename previous `references` field to `related`
- Use `url` crate to parse metadata URL
- Bump `smol_str` to v0.1.17; MSRV 1.46+
- Replace `chrono` with `humantime`
- Mark enums as non_exhaustive
- Use `SystemTime` instead of a `git::Timestamp` type
- Rename `fetch` Cargo feature to `git`
- Rename `repository::GitRepository` to `repository::git::Repository`
### Removed
- `markdown` feature
## 0.22.2 (2020-10-27)
### Changed
- Revert "Refactor Advisory type handling"
## 0.22.1 (2020-10-26) [YANKED]
### Changed
- Refactor `Advisory` and `VulnerabilityInfo`
## 0.22.0 (2020-10-25) [YANKED]
### Added
- `fetch` feature
### Changed
- Bump `cargo-lock` to v6; `semver` to v0.11
- Make `advisory.title` and `advisory.description` struct fields
- Remove support for the V2 advisory format
- Mark the `advisory::parser` module as `pub`
- Bump `cargo-edit` to 0.7.0
- Bump `crates-index` from 0.15.4 to 0.16.0
- `advisory`: laxer function path handling
- `linter`: fully deprecate `obsolete` in favor of `yanked`
- `advisory`: `markdown` feature and `Advisory::description_html`
- `linter`: add support for V3 advisory format
- MSRV 1.41+
- Bump `platforms` crate to v1
### Fixed
- `linter`: correctly handle crates with dashes in names
### Removed
- `advisory.metadata.title` and `advisory.metadata.description`
## 0.21.0 (2020-06-23)
### Added
- `year`, `month`, and `day` methods to `advisory::Date`
- `unsound` informational advisory kind
### Changed
- Bump `crates-index` from 0.14 to 0.15
- Rename `obsolete` advisories to `yanked`
- Rename `warning::Kind::Informational` to `::Notice`
- Make `warning::Kind` a `#[non_exhausive]` enum
- Make `Informational` a `#[non_exhausive]` enum
### Removed
- Legacy `patched_versions` and `unaffected_versions`
## 0.20.1 (2020-06-14)
### Added
- `advisory::Id::numerical_part()`
## 0.20.0 (2020-05-06)
### Changed
- Make `WarningInfo` into a simple type alias
## 0.19.0 (2020-05-04)
- Refactor package scopes
- Prototype V3 Advisory Format
- Bump dependencies to link `libgit2` dynamically
- Add `WarningInfo` and modify `Warning` struct
- Drop support for the V1 advisory format
## 0.18.0 (2020-02-05)
- Move yanked crate auditing to `cargo-audit`
## 0.17.1 (2020-01-22)
- Update `cargo-lock` requirement from 3.0 to 4.0
## 0.17.0 (2020-01-19)
- Bump MSRV to 1.39
- Extract `cargo audit fix` logic into `Fixer`
- Warn for yanked crates
- Add `vendored-openssl` feature
- Support crate sources as a vulnerability query attribute
- Try to auto-detect proxy setting
## 0.16.0 (2019-10-13)
- Remove `support.toml` parsing
## 0.15.2 (2019-10-08)
- version: Fix matching bug for `>` version requirements
## 0.15.1 (2019-10-07)
- linter: Add `informational` as an allowable `[advisory]` key
- repository: Expose `authentication` module
## 0.15.0 (2019-10-01)
- Upgrade to `cargo-lock` crate v3.0
## 0.14.1 (2019-09-25)
- Upgrade to `cargo-lock` crate v2.0
## 0.14.0 (2019-09-24)
- warning: Extract into module; make more like `Vulnerability`
- Upgrade to `cvss` crate v1.0
- Upgrade to `cargo-lock` crate v1.0
## 0.13.0 (2019-09-23)
- linter: Ensure advisory date's year matches year in advisory ID
- Use the `cargo-lock` crate
- lockfile: Add (optional) DependencyGraph analysis
- Rename `rustsec::db` module to `rustsec::database`
- report: Generate warnings for selected informational advisories
- vulnerability: Add `affected_functions()`
- Add `rustsec::advisory::Linter`
- package: Parse dependencies from Cargo.lock
- Initial `report` module and built-in report-generating
- Basic query support
- Index the `rust` advisory directory from `RustSec/advisory-db`
- Add first-class support for GitHub Security Advisories (GHSA)
- Re-vendor Cargo's git authentication code
- `support.toml` for indicating supported versions
- Add support for "informational" advisories
- Add `rustsec::advisory::Category`
- Refactor advisory types: add `[affected]` and `[versions]` sections
- advisory: Add (optional) `cvss` field with CVSS v3.1 score
- Freshen deps: add `home`, remove `directories` and `failure`
- Improved handling of prereleases; MSRV 1.35+
- Add `Version` and `VersionReq` newtypes
## 0.12.1 (2019-07-29)
- Use new inclusive range syntax
## 0.12.0 (2019-07-15)
- Update dependencies and use 2018 import conventions; Rust 1.32+
- Re-export all types in `advisory::paths::*`
## 0.11.0 (2019-01-13)
- Cargo.toml: Update `platforms` crate to v0.2
- Redo advisory's `affected_functions` as `affected_paths`
## 0.10.0 (2018-12-14)
- Implement `affected_functions` advisory attribute
- Fix handling of `unaffected_versions`
- Update to Rust 2018 edition
## 0.9.3 (2018-10-14)
- Create parents of the `advisory-db` repo dir
## 0.9.2 (2018-10-14)
- Handle cloning `advisory-db` into existing, empty dir
## 0.9.1 (2018-07-29)
- Use Cargo's git authentication helper
## 0.9.0 (2018-07-26)
- Use `platforms` crate for platform-related functionality
## 0.8.0 (2018-07-24)
- Advisory platform requirements
- Cargo-like keyword support
## 0.7.5 (2018-07-24)
- Allow `AdvisoryId::new()` to parse `RUSTSEC-0000-0000`
## 0.7.4 (2018-07-23)
- Add link to logo image for docs.rs
## 0.7.3 (2018-07-23)
- Fix builds with `--no-default-features`
## 0.7.2 (2018-07-23)
- README.md: Badge fixups, add gitter badge
## 0.7.1 (2018-07-23)
- Cargo.toml: Formatting fixups, add `readme` attribute
## 0.7.0 (2018-07-22)
- Validate dates are well-formed
- Add `AdvisoryIdKind` and limited support for parsing advisory IDs
- Add a `Vulnerabilities` collection struct
- Parse aliases, references, and unaffected versions
- Parse (but do not yet verify) signatures on advisory-db commits
- Parse individual advisory `.toml` files rather than Advisories.toml
- Switch to `git2`-based fetcher for `advisory-db`
- Use serde to parse advisories TOML and `Cargo.lock` files
- Use `failure` crate for error handling
## 0.6.0 (2017-03-05)
- Use `semver::Version` for `lockfile::Package` versions
- Move `AdvisoryDatabase` under the `::db` module
- Lockfile support
## 0.5.2 (2017-02-26)
- Add `AdvisoryDatabase::fetch_from_url()`
## 0.5.1 (2017-02-26)
- Make `advisory` and `error` modules public
## 0.5.0 (2017-02-26)
- Use str version param for `AdvisoryDatabase::find_vulns_for_crate()`
## 0.4.0 (2017-02-26)
- Add `AdvisoryDatabase::find_vulns_for_crate()`
## 0.3.0 (2017-02-26)
- Rename `crate_name` TOML attribute back to `package`
## 0.2.0 (2017-02-25)
- Rename `package` TOML attribute to `crate_name`
- Add iterator support to `AdvisoryDatabase`
## 0.1.0 (2017-02-25)
- Initial release