Static Analyzer for Solidity
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.
slither/tests/detectors/missing-zero-check/missing_zero_address_valida...

72 lines
2.0 KiB

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
}
}