diff --git a/test/integration/Euler.t.sol b/test/integration/Euler.t.sol index e5a3293e..7ff398fa 100644 --- a/test/integration/Euler.t.sol +++ b/test/integration/Euler.t.sol @@ -1145,4 +1145,36 @@ contract EulerIntegrationTest is BaseTest { assertGe(lPair2Shares, lPair2SharesBefore); assertGe(lPair3Shares, lPair3SharesBefore); } + + function testDoSAttack_Supply() external allNetworks allPairs { + // arrange + _deal(address(USDC), _alice, 1_000_000e6); + vm.prank(_alice); + USDC.transfer(address(_manager), 1231232); + + // act - adjustManagement should still succeed despite extra tokens + int256 lAmtToManage = 2e6; + _manager.adjustManagement(_pair, USDC == _pair.token0() ? lAmtToManage : int256(0), USDC == _pair.token1() ? lAmtToManage : int256(0)); + + // assert + assertGt(USDC.balanceOf(address(_manager)), 0); + assertApproxEqAbs(_manager.getBalance(_pair, USDC), uint256(lAmtToManage), 1); + } + + function testDoSAttack_Withdraw() external allNetworks allPairs { + // arrange + int256 lAmtToManage = 2e6; + _increaseManagementOneToken(lAmtToManage); + uint256 lUnexpectedTokens = 33222; + _deal(address(USDC), address(_manager), lUnexpectedTokens); + + // act + uint256 lBalance = _manager.getBalance(_pair, USDC); + _manager.adjustManagement(_pair, _pair.token0() == USDC ? -int256(lBalance) : int256(0), _pair.token1() == USDC ? -int256(lBalance) : int256(0)); + + // assert + assertEq(_manager.getBalance(_pair, USDC), 0); + assertEq(USDCVault.balanceOf(address(_manager)), 0); + assertEq(USDC.balanceOf(address(_manager)), lUnexpectedTokens); + } }