An open API service indexing awesome lists of open source software.

https://github.com/selfint/ltsa

Static analysis tools leveraging LSP and tree-sitter.
https://github.com/selfint/ltsa

Last synced: 8 months ago
JSON representation

Static analysis tools leveraging LSP and tree-sitter.

Awesome Lists containing this project

README

          

# ltsa
Static analysis tools leveraging LSP and tree-sitter.

## Example output

Executed on [contract](https://github.com/selfint/ltsa/tree/main/tools/scanexr/tests/solidity/contract)


Stacktrace: 1




function other(address a, uint b) pure returns (uint, address) {

return (b, a);
}

function hacky(address target, uint amount) {
(bool sent, ) = target.call{value: amount}("");
/* ^^^^^^ start */
require(sent, "Failed to send Ether");
}




function other(address a, uint b) pure returns (uint, address) {

return (b, a);
}

function hacky(address target, uint amount) {
(bool sent, ) = target.call{value: amount}("");
/* ^^^^^^ start */
require(sent, "Failed to send Ether");
}




function other(address a, uint b) pure returns (uint, address) {

return (b, a);
}

function hacky(address target, uint amount) {
(bool sent, ) = target.call{value: amount}("");
/* ^^^^^^ start */
require(sent, "Failed to send Ether");
}






function other(address a, uint b) pure returns (uint, address) {
return (b, a);
}

function hacky(address target, uint amount) {
(bool sent, ) = target.call{value: amount}("");
/* ^^^^^^ start */
require(sent, "Failed to send Ether");
}






function other(address a, uint b) pure returns (uint, address) {
return (b, a);
}

function hacky(address target, uint amount) {
(bool sent, ) = target.call{value: amount}("");
/* ^^^^^^ start */
require(sent, "Failed to send Ether");
}




        address bar = foo(sender, sender);


uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);

balances[bar] = 0;
}

// Helper function to check the balance of this contract




        address bar = foo(sender, sender);


uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);

balances[bar] = 0;
}

// Helper function to check the balance of this contract




        address bar = foo(sender, sender);


uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);

balances[bar] = 0;
}

// Helper function to check the balance of this contract




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




        (uint c, address d) = other(a2, 1);


return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();






return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();






return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();




        (uint c, address d) = other(a2, 1);


return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    }


function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);

hacky(bar, bal);




    function foo(address a, address b) private pure returns (address) {

return a;
}

function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);




    function foo(address a, address b) private pure returns (address) {

return a;
}

function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);




    function foo(address a, address b) private pure returns (address) {

return a;
}

function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);




    function foo(address a, address b) private pure returns (address) {

return a;
}

function withdraw() public {
address sender = getSender();

address bar = foo(sender, sender);

uint bal = balances[bar];
require(bal > 0);




    function getSender2() private view returns (address) {

return msg.sender;
/* ^^^^^^^^^^ definition */
}

function getSender() private view returns (address) {
if (false) {
return foo(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
} else if (false) {
return ret2(0x0000000000000000000000000000000000000000, msg.sender);




        /*     ^^^^^^^^^^ definition */

}

function getSender() private view returns (address) {
if (false) {
return foo(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
} else if (false) {
return ret2(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
}




        /*     ^^^^^^^^^^ definition */

}

function getSender() private view returns (address) {
if (false) {
return foo(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
} else if (false) {
return ret2(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
}




        (uint c, address d) = other(a2, 1);


return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();






return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();






return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();




        (uint c, address d) = other(a2, 1);


return d;
}

function foo(address a, address b) private pure returns (address) {
return a;
}

function withdraw() public {
address sender = getSender();




        /*     ^^^^^^^^^^ definition */

}

function getSender() private view returns (address) {
if (false) {
return foo(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
} else if (false) {
return ret2(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
}




        /*     ^^^^^^^^^^ definition */

}

function getSender() private view returns (address) {
if (false) {
return foo(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
} else if (false) {
return ret2(0x0000000000000000000000000000000000000000, msg.sender);
/* ^^^^^^^^^^ definition */
}