mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
contract Simple{
 | 
						|
 | 
						|
    address destination;
 | 
						|
    address source;
 | 
						|
 | 
						|
    function set(address source_taint) public{
 | 
						|
        destination = source_taint;
 | 
						|
    }
 | 
						|
 | 
						|
    function set2() public{
 | 
						|
        destination = source;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
contract Reference{
 | 
						|
 | 
						|
    struct St{
 | 
						|
        uint val;
 | 
						|
    }
 | 
						|
 | 
						|
    St destination;
 | 
						|
    St source;
 | 
						|
    St destination_indirect_1;
 | 
						|
    St destination_indirect_2;
 | 
						|
 | 
						|
    function set(uint source_taint) public{
 | 
						|
        destination.val = source_taint;
 | 
						|
    }
 | 
						|
 | 
						|
    function set2() public{
 | 
						|
        destination.val = source.val;
 | 
						|
    }
 | 
						|
 | 
						|
    function set3(uint source_taint) public{
 | 
						|
        St storage ref = destination_indirect_1;
 | 
						|
        if(true){
 | 
						|
            ref = destination_indirect_2;
 | 
						|
        }
 | 
						|
        ref.val = source_taint;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
contract SolidityVar{
 | 
						|
 | 
						|
    address addr_1;
 | 
						|
    address addr_2;
 | 
						|
 | 
						|
    constructor(){
 | 
						|
        addr_1 = msg.sender;
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
contract Intermediate{
 | 
						|
 | 
						|
    uint destination;
 | 
						|
    uint source_intermediate;
 | 
						|
    uint source;
 | 
						|
 | 
						|
    function f() public{
 | 
						|
        destination = source_intermediate;
 | 
						|
    }
 | 
						|
    function f2() public{
 | 
						|
        source_intermediate = source;
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
contract Base{
 | 
						|
 | 
						|
    uint destination;
 | 
						|
    uint source_intermediate;
 | 
						|
    uint source;
 | 
						|
 | 
						|
    function f() public{
 | 
						|
        destination = source_intermediate;
 | 
						|
    }
 | 
						|
}
 | 
						|
contract Derived is Base{
 | 
						|
 | 
						|
    function f2() public{
 | 
						|
        source_intermediate = source;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
contract PropagateThroughArguments {
 | 
						|
    uint var_tainted;
 | 
						|
    uint var_not_tainted;
 | 
						|
    uint var_dependant;
 | 
						|
 | 
						|
    function f(uint user_input) public {
 | 
						|
        f2(user_input, 4);
 | 
						|
        var_dependant = var_tainted;
 | 
						|
    }
 | 
						|
 | 
						|
    function f2(uint x, uint y) internal {
 | 
						|
        var_tainted = x;
 | 
						|
        var_not_tainted = y;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
contract PropagateThroughReturnValue {
 | 
						|
  uint var_dependant;
 | 
						|
  uint var_state;
 | 
						|
 | 
						|
  function foo() public {
 | 
						|
    var_dependant = bar();
 | 
						|
  }
 | 
						|
 | 
						|
  function bar() internal returns (uint) {
 | 
						|
    return (var_state);
 | 
						|
  }
 | 
						|
}
 | 
						|
// ====
 | 
						|
// SMTEngine: all
 | 
						|
// ----
 | 
						|
// Warning 2018: (1847-1915): Function state mutability can be restricted to view
 |