Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add simple fuzzing #168

Merged
merged 2 commits into from
Oct 30, 2019
Merged

Add simple fuzzing #168

merged 2 commits into from
Oct 30, 2019

Conversation

dpc
Copy link
Contributor

@dpc dpc commented Oct 13, 2019

Add simple fuzzing

Add infrastructure to automatically run fuzzers in CI,
and implement a simple fuzzing test based on triggering all (most)
public APIs in a randimized way.

As far as I was able to try, it catches the previous unsoundness issues
in a matter of seconds. This can be tried by changing the path = "../" dependency to
version = "=0.6.3" etc. and running the fuzzer manually. (Note: You'll need
to tweak the Cargo.lock to allow downloading the yanked versions).

@dpc dpc changed the title Add simple fuzzing (WIP) Add simple fuzzing Oct 13, 2019
@dpc
Copy link
Contributor Author

dpc commented Oct 13, 2019

It will probably take me couple of iterations to figure out the details and do some final polishing, but feel free to give feedback.

All right, looks somewhat presentable.

@dpc dpc changed the title (WIP) Add simple fuzzing Add simple fuzzing Oct 13, 2019
dpc referenced this pull request in MaulingMonkey/crev-proofs Oct 13, 2019
@jdm
Copy link
Member

jdm commented Oct 15, 2019

r? @SimonSapin

@bors-servo
Copy link
Contributor

☔ The latest upstream changes (presumably #162) made this pull request unmergeable. Please resolve the merge conflicts.

@dpc
Copy link
Contributor Author

dpc commented Oct 20, 2019

I can rebase if someone reviews. :D

@mbrubeck
Copy link
Collaborator

Running the fuzzer returns an error unless I create an in directory and add some input files first. Should there be initial input files checked in to the repository?

@dpc
Copy link
Contributor Author

dpc commented Oct 29, 2019

@mbrubeck Are you using afl? Yes. Please do something like:

mkdir in
echo "a" > in/foo

@dpc
Copy link
Contributor Author

dpc commented Oct 29, 2019

I'm not sure if I should add this to the README.md or just check it in. Ideally in should contain some failing cases, as far as I understand, though it i not necessary for such a simple fuzzing target.

@mbrubeck
Copy link
Collaborator

Yes, having a basic one-byte input checked in to the repo would be good; it'll be one less step for people to get started (or for scripts running fuzzing in CI).

Copy link
Collaborator

@mbrubeck mbrubeck left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great, thanks! Just needs a rebase and an AFL input file, as discussed above.

@mbrubeck
Copy link
Collaborator

The build failure is because #145 changed the API for SmallVec::drain. It takes a range argument now.

@dpc
Copy link
Contributor Author

dpc commented Oct 29, 2019

@mbrubeck Oh. I did a naive rebase, as I don't have access to my normal dev box. I'll fix it later today / tomorrow. Thanks!

dpc and others added 2 commits October 29, 2019 21:36
Add infrastructure to automatically run fuzzers in CI,
and implement a simple fuzzing test based on triggering all (most)
public APIs in a randimized way.

As far as I was able to try it catches the previous unsoundness issues
in a matter of seconds. This can be tried by changing the `path = "../"` dependency to
`version = "=0.6.3"` etc. and running the fuzzer manually. (Note: You'll need
to tweak the `Cargo.lock` to allow downloading the yanked versions).

Related to servo#124
@dpc
Copy link
Contributor Author

dpc commented Oct 30, 2019

@mbrubeck Done. :)

@mbrubeck
Copy link
Collaborator

@bors-servo r+

Thanks!

@bors-servo
Copy link
Contributor

📌 Commit a3ba738 has been approved by mbrubeck

@bors-servo
Copy link
Contributor

⌛ Testing commit a3ba738 with merge 01917a6...

bors-servo pushed a commit that referenced this pull request Oct 30, 2019
Add simple fuzzing

Add simple fuzzing

Add infrastructure to automatically run fuzzers in CI,
and implement a simple fuzzing test based on triggering all (most)
public APIs in a randimized way.

As far as I was able to try, it catches the previous unsoundness issues
in a matter of seconds. This can be tried by changing the `path = "../"` dependency to
`version = "=0.6.3"` etc. and running the fuzzer manually. (Note: You'll need
to tweak the `Cargo.lock` to allow downloading the yanked versions).
@bors-servo
Copy link
Contributor

☀️ Test successful - checks-travis
Approved by: mbrubeck
Pushing 01917a6 to master...

@bors-servo bors-servo merged commit a3ba738 into servo:master Oct 30, 2019
mbrubeck added a commit to mbrubeck/rust-smallvec that referenced this pull request Oct 30, 2019
* [breaking change] Use `MaybeUninit` internally to avoid possible undefined behavior (servo#162, servo#170).
* [breaking change] The `drain` method now takes a range argument, just like the standard `Vec::drain` (servo#145).
* [breaking change] Remove the `unreachable` function and replace it with the new standard `unreachable_unchecked` function (servo#164).
* [breaking change] Use `no_std` by default. This crate depends only on `core` and `alloc` by default. If the optional `write` feature is enabled then it depends on `std` so that `SmallVec<[u8, _]>` can implement the `std::io::Write` trait (servo#173).
* Add support for 96-element small vectors, `SmallVec<[T; 96]>` (servo#163).
* Iterators now implement `FusedIterator` (servo#172).
* Indexing now uses the standard `SliceIndex` trait (servo#166).
* Remove the deprecated `VecLike` trait (servo#165).
* Use `NonNull` internally (servo#171).
* Add automatic fuzz testing and MIRI testing (servo#168, servo#162).
* Update syntax and formatting to Rust 2018 standard (servo#174, servo#167).
@mbrubeck mbrubeck mentioned this pull request Oct 30, 2019
bors-servo pushed a commit that referenced this pull request Nov 2, 2019
Version 1.0.0

* Requires Rust 1.36 or later.
* [breaking change] Use `MaybeUninit` to avoid possible undefined behavior (#162, #170).
* [breaking change] The `drain` method now takes a range argument, just like the standard `Vec::drain` (#145).
* [breaking change] Remove the `unreachable` function and replace it with the new standard `unreachable_unchecked` function (#164).
* [breaking change] Use `no_std` by default. This crate depends only on `core` and `alloc` by default. If the optional `write` feature is enabled then it depends on `std` so that `SmallVec<[u8;_]>` can implement the `std::io::Write` trait (#173).
* Add support for 96-element small vectors, `SmallVec<[T; 96]>` (#163).
* Iterators now implement `FusedIterator` (#172).
* Indexing now uses the standard `SliceIndex` trait (#166).
* Remove the deprecated `VecLike` trait (#165).
* Use `NonNull` internally (#171).
* Add automatic fuzz testing and MIRI testing (#168, #162).
* Update syntax and formatting to Rust 2018 standard (#174, #167).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants