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:
co-authored by
Matt Kocubinski
parent
0afb905b9b
commit
84deebac66
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user