-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
- Create a contract
reentrancy.solwith source:
pragma solidity ^0.4.15;
contract Reentrance {
mapping(address => uint256) userBalance;
function getBalance(address u) constant returns (uint256) {
return userBalance[u];
}
function addToBalance() payable {
userBalance[msg.sender] += msg.value;
}
function withdrawBalance() {
// send userBalance[msg.sender] ethers to msg.sender
// if mgs.sender is a contract, it will call its fallback function
if (!(msg.sender.call.value(userBalance[msg.sender])())) {
throw;
}
userBalance[msg.sender] = 0;
}
function withdrawBalance_fixed() {
// to protect against re-entrancy, the state variable
// has to be change before the call
uint256 amount = userBalance[msg.sender];
userBalance[msg.sender] = 0;
if (!(msg.sender.call.value(amount)())) {
throw;
}
}
function withdrawBalance_fixed_2() {
// send() and transfer() are safe against reentrancy
// they do not transfer the remaining gas
// and they give just enough gas to execute few instructions
// in the fallback function (no further call possible)
msg.sender.transfer(userBalance[msg.sender]);
userBalance[msg.sender] = 0;
}
}
embark-mythx reports the following errors:
However looking at the results in the MythX portal, we see slightly different results:
Expected: The results in the embark-mythx output should match the results in the MythX portal.
Metadata
Metadata
Assignees
Labels
No labels

