fix: (TychoRouter) Revert if empty swaps

- This is for security purposes. Max uncovered a vulnerability where funds could be stolen if we don't ether the while loop (i.e. if we have empty swaps).
This commit is contained in:
TAMARA LIPOWSKI
2025-02-10 23:49:01 -05:00
parent 12b6ba0743
commit 37efe52c10
2 changed files with 12 additions and 0 deletions

View File

@@ -17,6 +17,7 @@ import {LibSwap} from "../lib/LibSwap.sol";
error TychoRouter__WithdrawalFailed(); error TychoRouter__WithdrawalFailed();
error TychoRouter__AddressZero(); error TychoRouter__AddressZero();
error TychoRouter__EmptySwaps();
error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount); error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount);
error TychoRouter__AmountInNotFullySpent(uint256 leftoverAmount); error TychoRouter__AmountInNotFullySpent(uint256 leftoverAmount);
error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount); error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount);
@@ -191,6 +192,10 @@ contract TychoRouter is
internal internal
returns (uint256) returns (uint256)
{ {
if (swaps_.length == 0) {
revert TychoRouter__EmptySwaps();
}
uint256 currentAmountIn; uint256 currentAmountIn;
uint256 currentAmountOut; uint256 currentAmountOut;
uint8 tokenInIndex = 0; uint8 tokenInIndex = 0;

View File

@@ -672,6 +672,13 @@ contract TychoRouterTest is TychoRouterTestSetup {
assertGe(finalBalance, expAmountOut); assertGe(finalBalance, expAmountOut);
} }
function testEmptySwapsRevert() public {
uint256 amountIn = 10 ** 18;
bytes memory swaps = "";
vm.expectRevert(TychoRouter__EmptySwaps.selector);
tychoRouter.exposedSwap(amountIn, 2, swaps);
}
function testSingleSwapIntegration() public { function testSingleSwapIntegration() public {
// Test created with calldata from our router encoder, replacing the executor // Test created with calldata from our router encoder, replacing the executor
// address with the USV2 executor address. // address with the USV2 executor address.