<!-- canonical: https://0xsimao.com/findings/clip-finance-i-halted-withdrawals-withdraw-transfer -->

# Halted withdrawals in BatchOut:withdrawFulfill() due to tokens transfer() reverting on 0 transfer amount

Crit/High · Three Sigma · DeFi infrastructure · 10th November, 2023

Finding 3S-Clip Finance-M03 of the Clip Finance Strategies security review.

- Protocol: https://www.clip.finance/
- Report: /reports/clip-finance-i
- Source: https://cdn.sanity.io/files/qoqld077/production/c23d04c8223879d2443221caf3ccb55ac118441a.pdf

---

### Description

Some tokens may [revert](https://github.com/ClipFinance/strategy-router/blob/master/contracts/Batch.sol#L214) on 0 amount transfers. This means that if someone schedules a
withdrawal of 1 share, it could convert to a 0 amount and [halt](https://github.com/ClipFinance/strategy-router/blob/master/contracts/BatchOut.sol#L379) all the other withdrawals.

### Recommendation

Skip the transfer if the amount to transfer is 0.

### Status

Addressed in [#48a6f08](https://github.com/ClipFinance/StrategyRouter-private/commit/48a6f08095c424a370067b42978f8d7b06a1043b)

---

Related findings:

- [Withdrawals can fail due to deposits reverting in `completeQueuedWithdrawal()`](https://0xsimao.com/findings/renzo-withdrawals-deposits-complete-withdrawal): Renzo
- [Wrong reward distribution between early and late depositors because of the late `syncRewards()` call in the cycle, `syncReward()` logic should be executed in each withdraw or deposits (without reverting)](https://0xsimao.com/findings/gogopool-reward-rewards-withdraw-deposits): GoGoPool
- [CEI pattern is not followed on LoopedVault::fulfillWithdraw()](https://0xsimao.com/findings/yieldoor-iii-cei-followed-fulfill-withdraw): Yieldoor LoopedVault Update
- [Users can exploit the batch minting feature to avoid paying minting fees for tokens](https://0xsimao.com/findings/titles-publishing-protocol-exploit-feature-avoid-fees): TITLES Publishing Protocol
