From 2d2820b0064a4e9da7f19127990a1a25aa78ff07 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 14 Jun 2024 12:24:17 +0300 Subject: [PATCH 1/2] transfer: Disallow a forwarding object specified with zero hops and a memo. --- modules/apps/transfer/types/forwarding.go | 12 ++++++++---- modules/apps/transfer/types/forwarding_test.go | 5 +++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/apps/transfer/types/forwarding.go b/modules/apps/transfer/types/forwarding.go index 53ebbb456bc..5d2ba6fd676 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 are zero") + } + 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..62bd1dab1ac 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 zero hops and specified memo", + types.NewForwarding("memo"), + types.ErrInvalidForwarding, + }, { "invalid forwarding with too short hop port ID", types.NewForwarding( From 6ae3497f8460e35f72efe1de905e5404242a391b Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 14 Jun 2024 13:03:23 +0300 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Carlos Rodriguez --- modules/apps/transfer/types/forwarding.go | 2 +- modules/apps/transfer/types/forwarding_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/transfer/types/forwarding.go b/modules/apps/transfer/types/forwarding.go index 5d2ba6fd676..21d1e634068 100644 --- a/modules/apps/transfer/types/forwarding.go +++ b/modules/apps/transfer/types/forwarding.go @@ -27,7 +27,7 @@ func (fi Forwarding) Validate() error { } if len(fi.Hops) == 0 && fi.Memo != "" { - return errorsmod.Wrap(ErrInvalidForwarding, "memo specified when forwarding hops are zero") + return errorsmod.Wrap(ErrInvalidForwarding, "memo specified when forwarding hops is empty") } for _, hop := range fi.Hops { diff --git a/modules/apps/transfer/types/forwarding_test.go b/modules/apps/transfer/types/forwarding_test.go index 62bd1dab1ac..d9283164cf7 100644 --- a/modules/apps/transfer/types/forwarding_test.go +++ b/modules/apps/transfer/types/forwarding_test.go @@ -57,7 +57,7 @@ func TestForwarding_Validate(t *testing.T) { types.ErrInvalidMemo, }, { - "invalid forwarding with zero hops and specified memo", + "invalid forwarding with empty hops and specified memo", types.NewForwarding("memo"), types.ErrInvalidForwarding, },