From f8a22132680a0f918fc7053cd95c35bbf0a831ce Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Wed, 11 Dec 2024 18:23:02 -0600 Subject: [PATCH 1/6] fix for ibc-go use case --- x/tx/decode/unknown.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/x/tx/decode/unknown.go b/x/tx/decode/unknown.go index fed2c1be8ff8..3f60c38f4828 100644 --- a/x/tx/decode/unknown.go +++ b/x/tx/decode/unknown.go @@ -82,6 +82,13 @@ func RejectUnknownFields(bz []byte, desc protoreflect.MessageDescriptor, allowUn if fieldMessage == nil { continue } + if fieldMessage.IsPlaceholder() { + innerDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName()) + if err != nil { + return hasUnknownNonCriticals, err + } + fieldMessage = innerDesc.(protoreflect.MessageDescriptor) + } // consume length prefix of nested message _, o := protowire.ConsumeVarint(fieldBytes) From 763c5dc0ac0c550609c1dd4ae1ccefe838e2702e Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 12 Dec 2024 11:47:23 -0600 Subject: [PATCH 2/6] add comments --- x/tx/decode/unknown.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/x/tx/decode/unknown.go b/x/tx/decode/unknown.go index 3f60c38f4828..e7298b317c8a 100644 --- a/x/tx/decode/unknown.go +++ b/x/tx/decode/unknown.go @@ -82,12 +82,15 @@ func RejectUnknownFields(bz []byte, desc protoreflect.MessageDescriptor, allowUn if fieldMessage == nil { continue } + // if a message descriptor is a placeholder, resolve it. this could happen when descriptor has been registered in + // the "google.golang.org/protobuf" resgistry but not in "github.com/cosmos/gogoproto". + // fixes: https://github.com/cosmos/cosmos-sdk/issues/22574 if fieldMessage.IsPlaceholder() { - innerDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName()) + gogoDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName()) if err != nil { - return hasUnknownNonCriticals, err + return hasUnknownNonCriticals, fmt.Errorf("could not resolve placeholder descriptor: %v: %w", fieldMessage, err) } - fieldMessage = innerDesc.(protoreflect.MessageDescriptor) + fieldMessage = gogoDesc.(protoreflect.MessageDescriptor) } // consume length prefix of nested message From 044f2790ece315a737f66305bdb10c04939fc3f3 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 12 Dec 2024 11:49:40 -0600 Subject: [PATCH 3/6] add changelog entry --- x/tx/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index 92245db8f77b..db5967131f96 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -33,6 +33,10 @@ Since v0.13.0, x/tx follows Cosmos SDK semver: https://github.com/cosmos/cosmos- ## [Unreleased] +### Bug Fixes + +* [#22852](https://github.com/cosmos/cosmos-sdk/pull/22852) Fallback to injected resolver for placeholder descriptors. + ## [v1.0.0-alpha.2](https://github.com/cosmos/cosmos-sdk/releases/tag/x/tx/v1.0.0-alpha.2) - 2024-11-01 * [#22311](https://github.com/cosmos/cosmos-sdk/pull/22311) Fix add feePayer as signer. From b9ab7f937275e513f828636581ddc4c19c645de5 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 12 Dec 2024 11:55:06 -0600 Subject: [PATCH 4/6] prepare changelog for release --- x/tx/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index db5967131f96..7120fe357497 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -33,6 +33,8 @@ Since v0.13.0, x/tx follows Cosmos SDK semver: https://github.com/cosmos/cosmos- ## [Unreleased] +## [v1.0.0-alpha.3](https://github.com/cosmos/cosmos-sdk/releases/tag/x/tx/v1.0.0-alpha.3) - 2024-12-12 + ### Bug Fixes * [#22852](https://github.com/cosmos/cosmos-sdk/pull/22852) Fallback to injected resolver for placeholder descriptors. From 750bba02845d8e004e02d9330f0c28a493adee03 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 12 Dec 2024 11:57:18 -0600 Subject: [PATCH 5/6] comment format --- x/tx/decode/unknown.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x/tx/decode/unknown.go b/x/tx/decode/unknown.go index e7298b317c8a..c03b2997b6ec 100644 --- a/x/tx/decode/unknown.go +++ b/x/tx/decode/unknown.go @@ -82,8 +82,9 @@ func RejectUnknownFields(bz []byte, desc protoreflect.MessageDescriptor, allowUn if fieldMessage == nil { continue } - // if a message descriptor is a placeholder, resolve it. this could happen when descriptor has been registered in - // the "google.golang.org/protobuf" resgistry but not in "github.com/cosmos/gogoproto". + // if a message descriptor is a placeholder resolve it using the injected resolver. + // this can happen when a descriptor has been registered in the "google.golang.org/protobuf" + // resgistry but not in "github.com/cosmos/gogoproto". // fixes: https://github.com/cosmos/cosmos-sdk/issues/22574 if fieldMessage.IsPlaceholder() { gogoDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName()) From 46ea6e65026df2795b16853926c8c7d4baf15583 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 12 Dec 2024 11:57:50 -0600 Subject: [PATCH 6/6] whitespace --- x/tx/decode/unknown.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/tx/decode/unknown.go b/x/tx/decode/unknown.go index c03b2997b6ec..cd0ed0ba7aa1 100644 --- a/x/tx/decode/unknown.go +++ b/x/tx/decode/unknown.go @@ -83,8 +83,8 @@ func RejectUnknownFields(bz []byte, desc protoreflect.MessageDescriptor, allowUn continue } // if a message descriptor is a placeholder resolve it using the injected resolver. - // this can happen when a descriptor has been registered in the "google.golang.org/protobuf" - // resgistry but not in "github.com/cosmos/gogoproto". + // this can happen when a descriptor has been registered in the + // "google.golang.org/protobuf" resgistry but not in "github.com/cosmos/gogoproto". // fixes: https://github.com/cosmos/cosmos-sdk/issues/22574 if fieldMessage.IsPlaceholder() { gogoDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName())