libfuzzer-sys 0.4.5

A wrapper around LLVM's libFuzzer runtime.
Documentation
## Unreleased

Released YYYY-MM-DD.

### Added

* TODO (or remove section if none)

### Changed

* TODO (or remove section if none)

### Deprecated

* TODO (or remove section if none)

### Removed

* TODO (or remove section if none)

### Fixed

* TODO (or remove section if none)

### Security

* TODO (or remove section if none)

--------------------------------------------------------------------------------

## 0.4.5

Released 2022-10-18.

### Added

* Added the ability to tell libfuzzer whether to keep files inputs in the corpus
  or not. See the `Corpus` type and extended documentation for the
  `fuzz_target!` macro for details.

### Changed

* Ensured that there is always at least one inline-never frame on the stack per
  fuzz target. This helps prevent oss-fuzz from "deduplicating" different bugs
  from different fuzz targets into the same bug.

--------------------------------------------------------------------------------

## 0.4.4

Released 2022-09-01.

### Changed

* Updated to `libFuzzer` commit `df90d22` (`release/15.x`).
* LLVM 16's [upcoming change][llvm_cxx17] to build requirements to C++17
  necessitate reflecting those changes. (`libFuzzer` updates contain C++14 code)
* Drastically reduce build times by using parallel C++ compilation jobs
* Updated `rand` dependency from 0.8.3 to 0.8.5
* Updated `flate2` dependency from 1.0.20 to 1.0.24

[llvm_cxx17]: https://llvm.org/docs/ReleaseNotes.html#update-on-required-toolchains-to-build-llvm

--------------------------------------------------------------------------------

## 0.4.3

Released 2020-03-03.

### Changed

* Updated to `libFuzzer` commit `60e32a1`.

### Fixed

* Fixed an issue where the `fuzz_target!` macro would sometimes expand to
  versions of itself that were not `$crate` prefixed and would result in "error:
  cannot find macro `fuzz_target` in this scope" if the caller didn't import the
  macro but used the qualified version of it instead.

--------------------------------------------------------------------------------

## 0.4.2

Released 2020-05-26.

### Changed

* Improved performance of checking for whether `cargo fuzz` is requesting the
  `std::fmt::Debug` output of an input or not. This is always false during
  regular fuzzing, so making this check faster should give slightly better
  fuzzing throughput.

--------------------------------------------------------------------------------

## 0.4.1

Released 2020-05-13.

### Added

* Added support for defining custom mutators. See [the documentation for the
  `fuzz_mutator!`
  macro](https://docs.rs/libfuzzer-sys/0.4.1/libfuzzer_sys/macro.fuzz_mutator.html)
  for details.

### Changed

* Upgraded libfuzzer to llvm/llvm-project's 70cbc6d.

--------------------------------------------------------------------------------

## 0.4.0

Released 2021-02-24.

### Changed

* The public `arbitrary` dependency was updated to version 1.0.

--------------------------------------------------------------------------------

## 0.3.5

Released 2020-11-18.

### Changed

* [Upgrade libfuzzer to 7bf89c2]https://github.com/rust-fuzz/libfuzzer/pull/68

--------------------------------------------------------------------------------

## 0.3.4

Released 2020-08-22.

### Changed

* Updated `arbitrary` dependency to 0.4.6

--------------------------------------------------------------------------------

## 0.3.3

Released 2020-07-27.

### Changed

* Upgraded libfuzzer to commit
  [4a4cafa]https://github.com/llvm/llvm-project/commit/4a4cafabc9067fced5890a245b03ef5897ad988b.

  Notably, this pulls in [the new Entropic engine for
  libFuzzer](https://mboehme.github.io/paper/FSE20.Entropy.pdf), which should
  boost fuzzing efficiency when enabled. You can enable Entropic by passing
  `-entropic=1` to your built fuzz targets (although, note that it is still
  labeled "experimental").

--------------------------------------------------------------------------------

## 0.3.2

Released 2020-03-18.

### Changed

* Upgraded the `arbitrary` dependency re-export to version 0.4.1.

--------------------------------------------------------------------------------

## 0.3.1

Released 2020-02-27.

### Changed

* Fixed a fuzzing performance issue where libfuzzer could unnecessarily spend
  time exploring all the ways that an `Arbitrary` implementation could fail to
  construct an instance of itself because the fuzzer provided too few bytes. See
  https://github.com/rust-fuzz/libfuzzer/issues/59 for details.

--------------------------------------------------------------------------------

## 0.3.0

Released 2019-01-22.

### Changed

* Now works with and re-exports `arbitrary` versions 0.4.x.

--------------------------------------------------------------------------------

## 0.2.1

Released 2019-01-16.

### Added

* Added support for the `CUSTOM_LIBFUZZER_STD_CXX=<lib>` environment variable
  during builds that already use a custom libFuzzer checkout with
  `CUSTOM_LIBFUZZER_PATH`. This allows you to explicitly choose to link LLVM or
  GNU C++ standard libraries.

--------------------------------------------------------------------------------

## 0.2.0

Released 2020-01-14.

### Changed

* Using `arbitrary` 0.3.x now. It is re-exported as `libfuzzer_sys::arbitrary`.

### Added

* You can enable support for `#[derive(Arbitrary)]` with the
  `"arbitrary-derive"` cargo feature. This is a synonym for the `arbitrary`
  crate's `"derive"` cargo feature.

--------------------------------------------------------------------------------

## 0.1.0