skills/vulnerability-patterns/unchecked-return-values/SKILL.md
Contract uses low-level calls: .call(), .send(), or .delegatecall()
npx skillsauth add apegurus/solidity-argus unchecked-return-valuesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
.call(), .send(), or .delegatecall()function withdraw(uint256 amount) external {
// .send() returns false on failure but does NOT revert
msg.sender.send(amount); // Return value ignored
balances[msg.sender] -= amount; // State updated even if send failed
}
function payout(address to, uint256 amount) external {
// .call() return value captured but never checked
(bool success,) = to.call{value: amount}("");
// success could be false, but execution continues
totalPaid += amount;
}
.call(, .send(, .delegatecall( invocationsrequire(success), if (!success) revert)addr.send(amount);), flag itrequire(success) or equivalentIERC20(token).transfer(...)) which auto-revert on failurerequire(success, "call failed")function withdraw(uint256 amount) external {
balances[msg.sender] -= amount;
(bool success,) = msg.sender.call{value: amount}("");
require(success, "ETH transfer failed");
}
testing
Specialist profile for mechanically applying the attack-vector deck and classifying vectors as skip, drop, or investigate.
tools
Specialist profile for libraries, helpers, base contracts, adapters, encoders, wrappers, and integration glue.
testing
Specialist profile for rounding, scale, decimal, downcast, and arithmetic accounting edge cases.
testing
Specialist profile for extracting conservation laws and state couplings, then searching for violating paths.