Use calldatacopy for selector retrieval to avoid access out of bounds for calldata.

This commit is contained in:
chriseth
2020-06-12 13:02:57 -05:00
committed by Alexander Arlt
parent f4fc095ae0
commit c8d95d601e
4 changed files with 250 additions and 84 deletions
+3 -1
View File
@@ -583,7 +583,9 @@ string IRGenerator::dispatchRoutine(ContractDefinition const& _contract)
Whiskers t(R"X(
if iszero(lt(calldatasize(), 4))
{
let selector := <shr224>(calldataload(0))
mstore(0, 0)
calldatacopy(28, 0, 4)
let selector := mload(0)
switch selector
<#cases>
case <functionSelector>