diff --git a/modules/apps/transfer/types/forwarding.go b/modules/apps/transfer/types/forwarding.go index 53ebbb456bc..21d1e634068 100644 --- a/modules/apps/transfer/types/forwarding.go +++ b/modules/apps/transfer/types/forwarding.go @@ -22,6 +22,14 @@ func (fi Forwarding) Validate() error { return errorsmod.Wrapf(ErrInvalidForwarding, "number of hops in forwarding path cannot exceed %d", MaximumNumberOfForwardingHops) } + if len(fi.Memo) > MaximumMemoLength { + return errorsmod.Wrapf(ErrInvalidMemo, "memo length cannot exceed %d", MaximumMemoLength) + } + + if len(fi.Hops) == 0 && fi.Memo != "" { + return errorsmod.Wrap(ErrInvalidForwarding, "memo specified when forwarding hops is empty") + } + for _, hop := range fi.Hops { if err := host.PortIdentifierValidator(hop.PortId); err != nil { return errorsmod.Wrapf(err, "invalid source port ID %s", hop.PortId) @@ -31,9 +39,5 @@ func (fi Forwarding) Validate() error { } } - if len(fi.Memo) > MaximumMemoLength { - return errorsmod.Wrapf(ErrInvalidMemo, "memo length cannot exceed %d", MaximumMemoLength) - } - return nil } diff --git a/modules/apps/transfer/types/forwarding_test.go b/modules/apps/transfer/types/forwarding_test.go index fd1df5ea05b..d9283164cf7 100644 --- a/modules/apps/transfer/types/forwarding_test.go +++ b/modules/apps/transfer/types/forwarding_test.go @@ -56,6 +56,11 @@ func TestForwarding_Validate(t *testing.T) { types.NewForwarding(ibctesting.GenerateString(types.MaximumMemoLength+1), validHop), types.ErrInvalidMemo, }, + { + "invalid forwarding with empty hops and specified memo", + types.NewForwarding("memo"), + types.ErrInvalidForwarding, + }, { "invalid forwarding with too short hop port ID", types.NewForwarding(