rust-ethereum / ethabi

Encode and decode smart contract invocations
Apache License 2.0
517 stars 186 forks source link

Basic Fuzzing Support and a Fix for a uncovered Bug during decoding of dynamic arrays #221

Open f0rki opened 3 years ago

f0rki commented 3 years ago

I added a basic fuzzing harness to support fuzzing the decoder with cargo fuzz. After a small fuzzing run this uncovered another issue in the new decoder of v14. Similar to the issue with the dynamic tuples (see #203), there is an issue with dynamic arrays size leading to an out-of-bounds access, which causes rust to panic. The fix is quite the same as for the tuple issue.

Currently the current fuzzing harness uses a fixed ABI (res/big.abi), which contains a bunch of ABI definitions and parameters. In the future it might make sense to also generate the ABI at random (e.g., using the arbitrary crate).