Submitted by 0xStalin, also found by Bauchibred
All user deposited assets, both, hTokens and underlyingTokens are at risk of getting stuck in a BranchPort if the address of the depositor gets blacklisted in one of all the deposited underlyingTokens.
The problem is caused by the fact that the redemption process works by sending back all the tokens that were deposited and that tokens can only be sent back to the same address from where they were deposited.
Users can deposit/bridgeOut multiple tokens at once (underlyingTokens and hTokens) from a Branch to Root. The system has a mechanism to prevent users from losing their tokens in case something fails with the execution of the crosschain message in the Root environment.
If something fails with the execution in Root, the users can retry the deposit, and as a last resource, they can retrieve and redeem their deposit from Root and get their tokens back in the Branch where they were deposited.
When redeeming deposits, the redemption is made atomically, in the sense that it redeems all the tokens that were deposited at once, it doesnt redeem one or two specific tokens; it redeems all of them.
The problem is that the function to redeem the tokens sets the recipient address to be the caller (msg.sender), and the caller is enforced to be only the owner of the depositor (i.e. the account from where the tokens were taken from). The fact that the depositors address gets blacklisted in one of the underlyingTokens should not cause that all the rest of the tokens to get stuck in the BranchPort.
I coded a PoC to demonstrate the problem Im reporting, using the RootForkTest.t.sol test file as the base to reproduce this PoC:
Make sure to import the below Mock a Blacklisted token under the test/ulysses-omnichain/helpers/ folder. Also, add the global variables and the 3 below functions in the RootForkTest file:
Now everything is ready to run the test and analyze the output:
forge test --mc RootForkTest --match-test testRedeemBlocklistedTokenPoC -vvvv
As we can see in the Output, the depositor cant redeem its deposit because the address was blacklisted in one of the 3 deposited underlyingTokens.
As a consequence, the depositors tokens are stuck in the BranchPort:

When redeeming the failed deposits, the easiest and most straightforward solution is to allow the depositor to pass an address where it would like to receive all the deposited tokens.
Token-Transfer
0xLightt (Maia) confirmed
0xBugsy (Maia) commented:
Note: For full discussion, see here.
