Skip to content

Commit ff682a3

Browse files
committed
fix: fix reentrancy
1 parent c277c32 commit ff682a3

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

contracts/cosmwasm-vm/cw-ibc-core/src/ics04_channel/packet/timeout_on_close.rs

+7
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ impl<'a> CwIbcCoreContext<'a> {
5151
let next_sequence_recv = Sequence::from(msg.next_sequence_recv);
5252

5353
let mut channel_end = self.get_channel_end(deps.storage, &src_port, &src_channel)?;
54+
5455
let counterparty = Counterparty::new(dst_port.clone(), Some(dst_channel.clone()));
5556
if !channel_end.counterparty_matches(&counterparty) {
5657
return Err(ContractError::IbcPacketError {
@@ -186,6 +187,12 @@ impl<'a> CwIbcCoreContext<'a> {
186187
let timeoutblock = to_ibc_timeout_block(&packet_timeout_height);
187188
let timeout = CwTimeout::with_block(timeoutblock);
188189
let ibc_packet = CwPacket::new(data, src, dest, packet.sequence, timeout);
190+
self.delete_packet_commitment(
191+
deps.storage,
192+
&src_port,
193+
&src_channel,
194+
packet.sequence.into(),
195+
)?;
189196

190197
let address = to_checked_address(deps.as_ref(), &msg.signer);
191198
let cosm_msg = cw_common::xcall_connection_msg::ExecuteMsg::IbcPacketTimeout {

contracts/javascore/ibc/src/main/java/ibc/ics25/handler/IBCHandlerPacket.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ public void recvPacket(MsgPacketRecv msg) {
5555
IIBCModule module = lookupModuleByChannel(packet.getDestinationPort(),
5656
packet.getDestinationChannel());
5757

58-
byte[] acknowledgement = module.onRecvPacket(msg.getPacket(), Context.getCaller());
58+
5959
_recvPacket(packet, msg.getProof(), msg.getProofHeight());
60+
byte[] acknowledgement = module.onRecvPacket(msg.getPacket(), Context.getCaller());
6061

6162
if (acknowledgement != null && acknowledgement.length > 0) {
6263
_writeAcknowledgement(
@@ -93,10 +94,9 @@ public void writeAcknowledgement(
9394
public void acknowledgePacket(MsgPacketAcknowledgement msg) {
9495
Packet packet = Packet.decode(msg.getPacket());
9596
IIBCModule module = lookupModuleByChannel(packet.getSourcePort(), packet.getSourceChannel());
96-
97-
module.onAcknowledgementPacket(msg.getPacket(), msg.getAcknowledgement(),
98-
Context.getCaller());
9997
_acknowledgePacket(packet, msg.getAcknowledgement(), msg.getProof(), msg.getProofHeight());
98+
module.onAcknowledgementPacket(msg.getPacket(), msg.getAcknowledgement(),
99+
Context.getCaller());
100100

101101
AcknowledgePacket(msg.getPacket(), msg.getAcknowledgement());
102102
}
@@ -112,9 +112,8 @@ public void requestTimeout(MsgRequestTimeoutPacket msg) {
112112
public void timeoutPacket(MsgPacketTimeout msg) {
113113
Packet packet = Packet.decode(msg.getPacket());
114114
IIBCModule module = lookupModuleByChannel(packet.getSourcePort(), packet.getSourceChannel());
115-
module.onTimeoutPacket(msg.getPacket(), Context.getCaller());
116115
_timeoutPacket(packet, msg.getProofHeight(), msg.getProof(), msg.getNextSequenceRecv());
117-
116+
module.onTimeoutPacket(msg.getPacket(), Context.getCaller());
118117
PacketTimeout(msg.getPacket());
119118
}
120119
}

0 commit comments

Comments
 (0)