Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ contract HypERC20CollateralMemo is HypERC20Collateral {
function _transferFromSender(
uint256 _amount
) internal virtual override returns (bytes memory) {
super._transferFromSender(_amount);
// Follow CEI pattern: read and clear _memo BEFORE external call
// to prevent reentrancy if wrappedToken has callbacks (ERC777, custom hooks)
bytes memory memo = _memo;
delete _memo;

super._transferFromSender(_amount);

emit IncludedMemo(memo);
return memo;
}
Expand Down
6 changes: 5 additions & 1 deletion solidity/contracts/token/extensions/HypERC20Memo.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ contract HypERC20Memo is HypERC20 {
function _transferFromSender(
uint256 _amount
) internal virtual override returns (bytes memory) {
super._transferFromSender(_amount);
// Follow CEI pattern: read and clear _memo BEFORE burn
// to prevent reentrancy if child contracts override token hooks with external calls
bytes memory memo = _memo;
delete _memo;

super._transferFromSender(_amount);

emit IncludedMemo(memo);
return memo;
}
Expand Down
Loading