ABIDecodeTwoDimensionalArrayMemoryIf used on memory byte arrays, result of the function ``abi.decode`` can depend on the contents of memory outside of the actual byte array that is decoded.
|The ABI specification uses pointers to data areas for everything that is dynamically-sized. When decoding data from memory (instead of calldata), the ABI decoder did not properly validate some of these pointers. More specifically, it was possible to use large values for the pointers inside arrays such that computing the offset resulted in an undetected overflow. This could lead to these pointers targeting areas in memory outside of the actual area to be decoded. This way, it was possible for ``abi.decode`` to return different values for the same encoded byte array.|
- Link: https://blog.soliditylang.org/2021/04/21/decoding-from-memory-bug/
- First Introduced: 0.4.16
- Fixed in Version: 0.8.4
- Severity<: very low