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