You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
284 lines
8.5 KiB
284 lines
8.5 KiB
## 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)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 1.0.0
|
|
|
|
Released 2020-02-24.
|
|
|
|
See 1.0.0-rc1 and 1.0.0-rc2 for changes since 0.4.7, which was the last main
|
|
line release.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 1.0.0-rc2
|
|
|
|
Released 2021-02-09.
|
|
|
|
### Added
|
|
|
|
* The `Arbitrary` trait is now implemented for `&[u8]`. [#67](https://github.com/rust-fuzz/arbitrary/pull/67)
|
|
|
|
### Changed
|
|
|
|
* Rename `Unstructured#get_bytes` to `Unstructured#bytes`. [#70](https://github.com/rust-fuzz/arbitrary/pull/70)
|
|
* Passing an empty slice of choices to `Unstructured#choose` returns an error. Previously it would panic. [71](https://github.com/rust-fuzz/arbitrary/pull/71)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 1.0.0-rc1
|
|
|
|
Released 2020-11-25.
|
|
|
|
### Added
|
|
|
|
* The `Arbitrary` trait is now implemented for `&str`. [#63](https://github.com/rust-fuzz/arbitrary/pull/63)
|
|
|
|
### Changed
|
|
|
|
* The `Arbitrary` trait now has a lifetime parameter, allowing `Arbitrary` implementations that borrow from the raw input (e.g. the new `&str` implementaton). The `derive(Arbitrary)` macro also supports deriving `Arbitrary` on types with lifetimes now. [#63](https://github.com/rust-fuzz/arbitrary/pull/63)
|
|
|
|
### Removed
|
|
|
|
* The `shrink` method on the `Arbitrary` trait has been removed.
|
|
|
|
We have found that, in practice, using [internal reduction](https://drmaciver.github.io/papers/reduction-via-generation-preview.pdf) via approaches like `cargo fuzz tmin`, where the raw input bytes are reduced rather than the `T: Arbitrary` type constructed from those raw bytes, has the best efficiency-to-maintenance ratio. To the best of our knowledge, no one is relying on or using the `Arbitrary::shrink` method. If you *are* using and relying on the `Arbitrary::shrink` method, please reach out by [dropping a comment here](https://github.com/rust-fuzz/arbitrary/issues/62) and explaining how you're using it and what your use case is. We'll figure out what the best solution is, including potentially adding shrinking functionality back to the `arbitrary` crate.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.7
|
|
|
|
Released 2020-10-14.
|
|
|
|
### Added
|
|
|
|
* Added an optimization to avoid unnecessarily consuming bytes from the
|
|
underlying data when there is only one possible choice in
|
|
`Unstructured::{int_in_range, choose, etc..}`.
|
|
|
|
* Added license files to the derive crate.
|
|
|
|
### Changed
|
|
|
|
* The `Arbitrary` implementation for `std::time::Duration` should now be faster
|
|
and produce durations with a more-uniform distribution of nanoseconds.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.6
|
|
|
|
Released 2020-08-22.
|
|
|
|
### Added
|
|
|
|
* Added the `Unstructured::peek_bytes` method.
|
|
|
|
### Changed
|
|
|
|
* Test case reduction via `cargo fuzz tmin` should be much more effective at
|
|
reducing the sizes of collections now. (See
|
|
[#53](https://github.com/rust-fuzz/arbitrary/pull/53) and the commit messages
|
|
for details.)
|
|
|
|
* Fuzzing with mutation-based fuzzers (like libFuzzer) should be more efficient
|
|
now. (See [#53](https://github.com/rust-fuzz/arbitrary/pull/53) and the commit
|
|
messages for details)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.5
|
|
|
|
Released 2020-06-18.
|
|
|
|
### Added
|
|
|
|
* Implement `Arbitrary` for zero length arrays.
|
|
* Implement `Arbitrary` for `Range` and `RangeInclusive`.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.4
|
|
|
|
Released 2020-04-29.
|
|
|
|
### Fixed
|
|
|
|
* Fixed the custom derive for enums when used via its full path (like
|
|
`#[derive(arbitrary::Arbitrary)]` rather than like `#[derive(Arbitrary)]`).
|
|
|
|
|
|
## 0.4.3
|
|
|
|
Released 2020-04-28.
|
|
|
|
### Fixed
|
|
|
|
* Fixed the custom derive when used via its full path (like
|
|
`#[derive(arbitrary::Arbitrary)]` rather than like `#[derive(Arbitrary)]`).
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.2
|
|
|
|
Released 2020-04-17.
|
|
|
|
### Changed
|
|
|
|
* We forgot to release a new version of the `derive_arbitrary` crate last
|
|
release. This release fixes that and so the `synstructure` dependency is
|
|
finally actually removed in the cargo releases.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.1
|
|
|
|
Released 2020-03-18.
|
|
|
|
### Removed
|
|
|
|
* Removed an internal dependency on the `synstructure` crate when the `derive`
|
|
feature is enabled. This should not have any visible downstream effects other
|
|
than faster build times!
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.4.0
|
|
|
|
Released 2020-01-22.
|
|
|
|
This is technically a breaking change, but we expect that nearly everyone should
|
|
be able to upgrade without any compilation errors. The only exception is if you
|
|
were implementing the `Arbitrary::size_hint` method by hand. If so, see the
|
|
"changed" section below and the [API docs for
|
|
`Arbitrary::shrink`](https://docs.rs/arbitrary/0.4.0/arbitrary/trait.Arbitrary.html#method.size_hint)
|
|
for details.
|
|
|
|
### Added
|
|
|
|
* Added [the `arbitary::size_hint::recursion_guard` helper
|
|
function][recursion_guard] for guarding against infinite recursion in
|
|
`size_hint` implementations for recursive types.
|
|
|
|
### Changed
|
|
|
|
* The `Arbitrary::size_hint` signature now takes a `depth: usize`
|
|
parameter. This should be passed along unmodified to any nested calls of other
|
|
`size_hint` methods. If you're implementing `size_hint` for a recursive type
|
|
(like a linked list or tree) or a generic type with type parameters, you
|
|
should use [the new `arbitrary::size_hint::recursion_guard` helper
|
|
function][recursion_guard].
|
|
|
|
### Fixed
|
|
|
|
* Fixed infinite recursion in generated `size_hint` implementations
|
|
from `#[derive(Arbitrary)]` for recursive types.
|
|
|
|
[recursion_guard]: https://docs.rs/arbitrary/0.4.0/arbitrary/size_hint/fn.recursion_guard.html
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.3.2
|
|
|
|
Released 2020-01-16.
|
|
|
|
### Changed
|
|
|
|
* Updated the custom derive's dependencies.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.3.2
|
|
|
|
Released 2020-01-15.
|
|
|
|
### Fixed
|
|
|
|
* Fixed an over-eager assertion condition in `Unstructured::int_in_range` that
|
|
would incorrectly trigger when given valid ranges of length one.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.3.1
|
|
|
|
Released 2020-01-14.
|
|
|
|
### Fixed
|
|
|
|
* Fixed some links and version numbers in README.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.3.0
|
|
|
|
Released 2020-01-14.
|
|
|
|
### Added
|
|
|
|
* Added the `"derive"` cargo feature, to enable `#[derive(Arbitrary)]` for
|
|
custom types. Enabling this feature re-exports functionality from the
|
|
`derive_arbitrary` crate.
|
|
* The custom derive for `Arbitrary` implements the shrink method for you now.
|
|
* All implementations of `Arbitrary` for `std` types implement shrinking now.
|
|
* Added the `Arbitrary::arbitrary_take_rest` method allows an `Arbitrary`
|
|
implementation to consume all of the rest of the remaining raw input. It has a
|
|
default implementation that forwards to `Arbitrary::arbitrary` and the custom
|
|
derive creates a smart implementation for your custom types.
|
|
* Added the `Arbitrary::size_hint` method for hinting how many raw bytes an
|
|
implementation needs to construct itself. This has a default implementation,
|
|
but the custom derive creates a smart implementation for your custom types.
|
|
* Added the `Unstructured::choose` method to choose one thing among a set of
|
|
choices.
|
|
* Added the `Unstructured::arbitrary_len` method to get an arbitrary length for
|
|
a collection of some arbitrary type.
|
|
* Added the `Unstructured::arbitrary_iter` method to create an iterator of
|
|
arbitrary instance of some type.
|
|
|
|
### Changed
|
|
|
|
* The `Arbitrary` trait was simplified a bit.
|
|
* `Unstructured` is a concrete type now, not a trait.
|
|
* Switched to Rust 2018 edition.
|
|
|
|
### Removed
|
|
|
|
* `RingBuffer` and `FiniteBuffer` are removed. Use `Unstructured` instead.
|
|
|
|
### Fixed
|
|
|
|
* Better `Arbitrary` implementation for `char`.
|
|
* Better `Arbitrary` implementation for `String`.
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.2.0
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
## 0.1.0
|