mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-13 16:31:09 +00:00
llvm-context: disable call re-entrancy for send and transfer (#196)
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8;
|
||||
|
||||
/* runner.json
|
||||
{
|
||||
"differential": true,
|
||||
"actions": [
|
||||
{
|
||||
"Upload": {
|
||||
"code": {
|
||||
"Solidity": {
|
||||
"contract": "BalanceReceiver"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"Instantiate": {
|
||||
"code": {
|
||||
"Solidity": {
|
||||
"contract": "Balance"
|
||||
}
|
||||
},
|
||||
"value": 24
|
||||
}
|
||||
},
|
||||
{
|
||||
"Call": {
|
||||
"dest": {
|
||||
"Instantiated": 0
|
||||
},
|
||||
"data": "1c8d16b30000000000000000000000000303030303030303030303030303030303030303000000000000000000000000000000000000000000000000000000000000000a"
|
||||
}
|
||||
},
|
||||
{
|
||||
"Call": {
|
||||
"dest": {
|
||||
"Instantiated": 0
|
||||
},
|
||||
"data": "6ada15d90000000000000000000000000303030303030303030303030303030303030303000000000000000000000000000000000000000000000000000000000000000a"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
*/
|
||||
|
||||
contract BalanceReceiver {
|
||||
constructor() payable {}
|
||||
|
||||
fallback() external payable {}
|
||||
}
|
||||
|
||||
contract Balance {
|
||||
constructor() payable {
|
||||
// 0 to EOA
|
||||
transfer_to(payable(address(0xdeadbeef)), 0);
|
||||
send_to(payable(address(0xdeadbeef)), 0);
|
||||
|
||||
// 1 to EOA
|
||||
transfer_to(payable(address(0xcafebabe)), 1);
|
||||
send_to(payable(address(0xcafebabe)), 1);
|
||||
|
||||
BalanceReceiver balanceReceiver = new BalanceReceiver();
|
||||
|
||||
// 0 to contract
|
||||
transfer_to(payable(address(balanceReceiver)), 0);
|
||||
send_to(payable(address(balanceReceiver)), 0);
|
||||
|
||||
// 1 to contract
|
||||
transfer_to(payable(address(balanceReceiver)), 1);
|
||||
send_to(payable(address(balanceReceiver)), 1);
|
||||
}
|
||||
|
||||
function transfer_to(address payable _dest, uint _amount) public payable {
|
||||
_dest.transfer(_amount);
|
||||
}
|
||||
|
||||
function send_to(address payable _dest, uint _amount) public payable {
|
||||
require(_dest.send(_amount));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user