Skip to content

Commit 987dcee

Browse files
fix: fix reentrancy (#871)
* fix: fix reentrancy * Update java-contracts-test.yml Install docker-compose --------- Co-authored-by: DeepakBomjan <44976635+DeepakBomjan@users.noreply.github.com>
1 parent c277c32 commit 987dcee

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

.github/workflows/java-contracts-test.yml

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ jobs:
3131
uses: actions/checkout@v3
3232
with:
3333
submodules: true
34+
- name: install docker-compose
35+
run: |
36+
sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
37+
sudo chmod +x /usr/local/bin/docker-compose
38+
3439
- name: Start local Blockchain
3540
run: docker logout public.ecr.aws && cd contracts/javascore/gochain-btp && make run
3641

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)