avoid overwrite of target function

This commit is contained in:
Ricardo Guilherme Schmidt 2018-03-11 22:11:42 +07:00
parent 86cf02e5f9
commit 266b1c3056
1 changed files with 5 additions and 3 deletions

View File

@ -4,7 +4,8 @@ pragma solidity ^0.4.17;
/**
* @title DelegatedCall
* @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
* @dev Abstract contract that delegates calls by `delegated` modifier to result of `_target()`
* @dev Abstract contract that delegates calls by `delegated` modifier to result of `targetDelegatedCall()`
* Important to avoid overwriting wrong storage pointers is that never define storage to this contract
*/
contract DelegatedCall {
/**
@ -12,20 +13,21 @@ contract DelegatedCall {
*/
modifier delegated {
//require successfull delegate call to remote `_target()`
require(_target().delegatecall(msg.data));
require(targetDelegatedCall().delegatecall(msg.data));
assembly {
let outSize := returndatasize
let outDataPtr := mload(0x40) //load memory
returndatacopy(outDataPtr, 0, outSize) //copy last return into pointer
return(outDataPtr, outSize)
}
assert(false); //should never reach here
_; //never will execute local logic
}
/**
* @dev defines the address for delegation of calls
*/
function _target()
function targetDelegatedCall()
internal
constant
returns(address);