From a3d1f147013acd45b9fbc73837e167e8020b6e83 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Mon, 21 Oct 2024 11:56:30 +0300 Subject: [PATCH] chore: limit packet data to length of one. --- modules/core/04-channel/v2/types/msgs.go | 12 ++++++++ modules/core/04-channel/v2/types/msgs_test.go | 28 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/modules/core/04-channel/v2/types/msgs.go b/modules/core/04-channel/v2/types/msgs.go index dc7537a5a93..fc50f93bbaa 100644 --- a/modules/core/04-channel/v2/types/msgs.go +++ b/modules/core/04-channel/v2/types/msgs.go @@ -139,6 +139,10 @@ func (msg *MsgRecvPacket) ValidateBasic() error { return errorsmod.Wrap(commitmenttypesv1.ErrInvalidProof, "proof commitment can not be empty") } + if len(msg.Packet.Data) != 1 { + return errorsmod.Wrapf(ErrInvalidPacketData, "packet data must be of length 1, got %d instead", len(msg.Packet.Data)) + } + _, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) @@ -164,6 +168,10 @@ func (msg *MsgAcknowledgement) ValidateBasic() error { return errorsmod.Wrap(commitmenttypesv1.ErrInvalidProof, "cannot submit an empty acknowledgement proof") } + if len(msg.Packet.Data) != 1 { + return errorsmod.Wrapf(ErrInvalidPacketData, "packet data must be of length 1, got %d instead", len(msg.Packet.Data)) + } + // TODO: Add validation for ack object https://github.com/cosmos/ibc-go/issues/7472 _, err := sdk.AccAddressFromBech32(msg.Signer) @@ -190,6 +198,10 @@ func (msg *MsgTimeout) ValidateBasic() error { return errorsmod.Wrap(commitmenttypesv1.ErrInvalidProof, "proof unreceived can not be empty") } + if len(msg.Packet.Data) != 1 { + return errorsmod.Wrapf(ErrInvalidPacketData, "packet data must be of length 1, got %d instead", len(msg.Packet.Data)) + } + _, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) diff --git a/modules/core/04-channel/v2/types/msgs_test.go b/modules/core/04-channel/v2/types/msgs_test.go index 5536d6240bc..a575fe27f14 100644 --- a/modules/core/04-channel/v2/types/msgs_test.go +++ b/modules/core/04-channel/v2/types/msgs_test.go @@ -175,6 +175,13 @@ func (s *TypesTestSuite) TestMsgSendPacketValidateBasic() { }, { name: "failure: invalid length for packetdata", + malleate: func() { + msg.PacketData = []types.PacketData{{}, {}} + }, + expError: types.ErrInvalidPacketData, + }, + { + name: "failure: invalid packetdata", malleate: func() { msg.PacketData = []types.PacketData{} }, @@ -241,6 +248,13 @@ func (s *TypesTestSuite) TestMsgRecvPacketValidateBasic() { }, expError: commitmenttypes.ErrInvalidProof, }, + { + name: "failure: invalid length for packetdata", + malleate: func() { + msg.Packet.Data = []types.PacketData{{}, {}} + }, + expError: types.ErrInvalidPacketData, + }, { name: "failure: invalid signer", malleate: func() { @@ -288,6 +302,13 @@ func (s *TypesTestSuite) TestMsgAcknowledge_ValidateBasic() { }, expError: commitmenttypes.ErrInvalidProof, }, + { + name: "failure: invalid length for packetdata", + malleate: func() { + msg.Packet.Data = []types.PacketData{{}, {}} + }, + expError: types.ErrInvalidPacketData, + }, { name: "failure: invalid signer", malleate: func() { @@ -345,6 +366,13 @@ func (s *TypesTestSuite) TestMsgTimeoutValidateBasic() { }, expError: ibcerrors.ErrInvalidAddress, }, + { + name: "failure: invalid length for packetdata", + malleate: func() { + msg.Packet.Data = []types.PacketData{{}, {}} + }, + expError: types.ErrInvalidPacketData, + }, { name: "failure: invalid packet", malleate: func() {