fix(x/tx): fallback to injected resolver for placeholder descriptors BACKPORT (#24409)

Co-authored-by: Matt Kocubinski <mkocubinski@gmail.com>
This commit is contained in:
Alex | Interchain Labs
2025-04-07 17:20:48 +00:00
committed by GitHub
co-authored by Matt Kocubinski
parent 0afb905b9b
commit 84deebac66
2 changed files with 12 additions and 0 deletions
+11
View File
@@ -96,6 +96,17 @@ func doRejectUnknownFields(
if fieldMessage == nil {
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".
// fixes: https://github.com/cosmos/cosmos-sdk/issues/22574
if fieldMessage.IsPlaceholder() {
gogoDesc, err := resolver.FindDescriptorByName(fieldMessage.FullName())
if err != nil {
return hasUnknownNonCriticals, fmt.Errorf("could not resolve placeholder descriptor: %v: %w", fieldMessage, err)
}
fieldMessage = gogoDesc.(protoreflect.MessageDescriptor)
}
// consume length prefix of nested message
_, o := protowire.ConsumeVarint(fieldBytes)