mirror of https://github.com/crytic/slither
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
4 years ago
|
contract C {
|
||
|
address owner;
|
||
|
|
||
|
modifier check_addr(address _addr) {
|
||
|
if (_addr != address(0)) {
|
||
|
_;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function bad0_set_owner(address new_owner) payable public{
|
||
|
owner = new_owner; // No check before use
|
||
|
}
|
||
|
|
||
|
function bad1_send(address payable addr) payable public{
|
||
|
addr.send(msg.value); // No check before send
|
||
|
addr.send(msg.value);
|
||
|
}
|
||
|
|
||
|
function bad2_transfer(address payable addr) payable public{
|
||
|
addr.transfer(msg.value); // No check before transfer
|
||
|
}
|
||
|
|
||
|
function bad3_transfer(address payable addr) payable public{
|
||
|
addr.transfer(msg.value);
|
||
|
require(addr != address(0)); // check after transfer just to verify detector heuristic implementation.
|
||
|
}
|
||
|
|
||
|
function bad4_call(address payable addr) payable public{
|
||
|
addr.call.value(msg.value)(""); // No check before call
|
||
|
}
|
||
|
|
||
|
function good0_set_owner(address new_owner) payable public{
|
||
|
if (new_owner != address(0)) { // Check
|
||
|
owner = new_owner;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function good1_set_owner() payable public{
|
||
|
owner = 0x0123456789012345678901234567890123456789; // No tainting
|
||
|
}
|
||
|
|
||
|
function good2_send(address payable addr) payable public{
|
||
|
if (addr != address(0)) {
|
||
|
addr.send(msg.value); // check before send
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function good3_transfer(address payable addr) payable public{
|
||
|
if (addr != address(0)) {
|
||
|
addr.transfer(msg.value); // check before transfer
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function good4_transfer(address payable addr) payable public{
|
||
|
require(addr != address(0));
|
||
|
addr.transfer(msg.value); // check in above require before transfer
|
||
|
}
|
||
|
|
||
|
function good5_transfer(address payable addr) payable public check_addr(addr) {
|
||
|
addr.transfer(msg.value); // checked in modifier before transfer
|
||
|
}
|
||
|
|
||
|
function good6_msg_sender() payable public {
|
||
|
owner = msg.sender; // msg.sender does not need to be zero validated
|
||
|
}
|
||
|
|
||
|
function good7_transfer_msg_sender() payable public {
|
||
|
address payable addr = msg.sender;
|
||
|
addr.transfer(msg.value); // msg.sender does not need to be zero validated
|
||
|
}
|
||
|
}
|