1## Unreleased 2 3Released YYYY-MM-DD. 4 5### Added 6 7* TODO (or remove section if none) 8 9### Changed 10 11* TODO (or remove section if none) 12 13### Deprecated 14 15* TODO (or remove section if none) 16 17### Removed 18 19* TODO (or remove section if none) 20 21### Fixed 22 23* TODO (or remove section if none) 24 25### Security 26 27* TODO (or remove section if none) 28 29-------------------------------------------------------------------------------- 30 31## 0.4.7 32 33Released 2023-08-10. 34 35### Added 36 37* Added the `link_libfuzzer` cargo feature. This feature is on by default and 38 preserves the existing behavior of statically linking libfuzzer. You can 39 disable it if you are linking your own version of libfuzzer some other way, or 40 another library that provides the same ABI as libfuzzer. 41 42-------------------------------------------------------------------------------- 43 44## 0.4.6 45 46Released 2023-01-26. 47 48### Fixed 49 50* Fixed a potential name conflict in functions generated by the `fuzz_target!` 51 macro. 52* Fixed potential stale builds when updating custom libfuzzers to link against. 53 54-------------------------------------------------------------------------------- 55 56## 0.4.5 57 58Released 2022-10-18. 59 60### Added 61 62* Added the ability to tell libfuzzer whether to keep files inputs in the corpus 63 or not. See the `Corpus` type and extended documentation for the 64 `fuzz_target!` macro for details. 65 66### Changed 67 68* Ensured that there is always at least one inline-never frame on the stack per 69 fuzz target. This helps prevent oss-fuzz from "deduplicating" different bugs 70 from different fuzz targets into the same bug. 71 72-------------------------------------------------------------------------------- 73 74## 0.4.4 75 76Released 2022-09-01. 77 78### Changed 79 80* Updated to `libFuzzer` commit `df90d22` (`release/15.x`). 81* LLVM 16's [upcoming change][llvm_cxx17] to build requirements to C++17 82 necessitate reflecting those changes. (`libFuzzer` updates contain C++14 code) 83* Drastically reduce build times by using parallel C++ compilation jobs 84* Updated `rand` dependency from 0.8.3 to 0.8.5 85* Updated `flate2` dependency from 1.0.20 to 1.0.24 86 87[llvm_cxx17]: https://llvm.org/docs/ReleaseNotes.html#update-on-required-toolchains-to-build-llvm 88 89-------------------------------------------------------------------------------- 90 91## 0.4.3 92 93Released 2020-03-03. 94 95### Changed 96 97* Updated to `libFuzzer` commit `60e32a1`. 98 99### Fixed 100 101* Fixed an issue where the `fuzz_target!` macro would sometimes expand to 102 versions of itself that were not `$crate` prefixed and would result in "error: 103 cannot find macro `fuzz_target` in this scope" if the caller didn't import the 104 macro but used the qualified version of it instead. 105 106-------------------------------------------------------------------------------- 107 108## 0.4.2 109 110Released 2020-05-26. 111 112### Changed 113 114* Improved performance of checking for whether `cargo fuzz` is requesting the 115 `std::fmt::Debug` output of an input or not. This is always false during 116 regular fuzzing, so making this check faster should give slightly better 117 fuzzing throughput. 118 119-------------------------------------------------------------------------------- 120 121## 0.4.1 122 123Released 2020-05-13. 124 125### Added 126 127* Added support for defining custom mutators. See [the documentation for the 128 `fuzz_mutator!` 129 macro](https://docs.rs/libfuzzer-sys/0.4.1/libfuzzer_sys/macro.fuzz_mutator.html) 130 for details. 131 132### Changed 133 134* Upgraded libfuzzer to llvm/llvm-project's 70cbc6d. 135 136-------------------------------------------------------------------------------- 137 138## 0.4.0 139 140Released 2021-02-24. 141 142### Changed 143 144* The public `arbitrary` dependency was updated to version 1.0. 145 146-------------------------------------------------------------------------------- 147 148## 0.3.5 149 150Released 2020-11-18. 151 152### Changed 153 154* [Upgrade libfuzzer to 7bf89c2](https://github.com/rust-fuzz/libfuzzer/pull/68) 155 156-------------------------------------------------------------------------------- 157 158## 0.3.4 159 160Released 2020-08-22. 161 162### Changed 163 164* Updated `arbitrary` dependency to 0.4.6 165 166-------------------------------------------------------------------------------- 167 168## 0.3.3 169 170Released 2020-07-27. 171 172### Changed 173 174* Upgraded libfuzzer to commit 175 [4a4cafa](https://github.com/llvm/llvm-project/commit/4a4cafabc9067fced5890a245b03ef5897ad988b). 176 177 Notably, this pulls in [the new Entropic engine for 178 libFuzzer](https://mboehme.github.io/paper/FSE20.Entropy.pdf), which should 179 boost fuzzing efficiency when enabled. You can enable Entropic by passing 180 `-entropic=1` to your built fuzz targets (although, note that it is still 181 labeled "experimental"). 182 183-------------------------------------------------------------------------------- 184 185## 0.3.2 186 187Released 2020-03-18. 188 189### Changed 190 191* Upgraded the `arbitrary` dependency re-export to version 0.4.1. 192 193-------------------------------------------------------------------------------- 194 195## 0.3.1 196 197Released 2020-02-27. 198 199### Changed 200 201* Fixed a fuzzing performance issue where libfuzzer could unnecessarily spend 202 time exploring all the ways that an `Arbitrary` implementation could fail to 203 construct an instance of itself because the fuzzer provided too few bytes. See 204 https://github.com/rust-fuzz/libfuzzer/issues/59 for details. 205 206-------------------------------------------------------------------------------- 207 208## 0.3.0 209 210Released 2019-01-22. 211 212### Changed 213 214* Now works with and re-exports `arbitrary` versions 0.4.x. 215 216-------------------------------------------------------------------------------- 217 218## 0.2.1 219 220Released 2019-01-16. 221 222### Added 223 224* Added support for the `CUSTOM_LIBFUZZER_STD_CXX=<lib>` environment variable 225 during builds that already use a custom libFuzzer checkout with 226 `CUSTOM_LIBFUZZER_PATH`. This allows you to explicitly choose to link LLVM or 227 GNU C++ standard libraries. 228 229-------------------------------------------------------------------------------- 230 231## 0.2.0 232 233Released 2020-01-14. 234 235### Changed 236 237* Using `arbitrary` 0.3.x now. It is re-exported as `libfuzzer_sys::arbitrary`. 238 239### Added 240 241* You can enable support for `#[derive(Arbitrary)]` with the 242 `"arbitrary-derive"` cargo feature. This is a synonym for the `arbitrary` 243 crate's `"derive"` cargo feature. 244 245-------------------------------------------------------------------------------- 246 247## 0.1.0 248