With Solidity 0.4.23 a require
statement seemingly fail if a contract called has a returndatasize
of less than 32. This issue was found when wrapping a transferFrom
function call, which doesn't return anything, in a require
.
Older contracts that use STOP
to return control flow place 1
on the stack through the return of CALL
and so RETURNDATASIZE
is set to 0
. The new require seems to enforce that at least 32
bytes must be returned by the child contract (with RETURNDATASIZE >= 0x20
) which seems to break old contracts that simply check whether the return of CALL
itself was 1
.
The token contract used is Adex.
This issue indicates that any token transfered without a return will fail, affecting any contract using tokens transfers that are wrapped in a require as of solidity v0.4.23
To ensure this really is an issue, we have tried running the code with 2 solidity versions. Essentially wrapping