Co-authored-by: haiyizxx <haiyizxx@gmail.com> Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
parent
8e710b7efc
commit
92af502815
@ -40,6 +40,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
Every module contains its own CHANGELOG.md. Please refer to the module you are interested in.
|
||||
|
||||
### Improvements
|
||||
|
||||
* (codec) [#22988](https://github.com/cosmos/cosmos-sdk/pull/22988) Improve edge case handling for recursion limits.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* (x/auth/tx) [#23148](https://github.com/cosmos/cosmos-sdk/pull/23148) Avoid panic from intoAnyV2 when v1.PublicKey is optional.
|
||||
|
||||
@ -274,10 +274,10 @@ func (r statefulUnpacker) cloneForRecursion() *statefulUnpacker {
|
||||
// UnpackAny deserializes a protobuf Any message into the provided interface, ensuring the interface is a pointer.
|
||||
// It applies stateful constraints such as max depth and call limits, and unpacks interfaces if required.
|
||||
func (r *statefulUnpacker) UnpackAny(any *Any, iface interface{}) error {
|
||||
if r.maxDepth == 0 {
|
||||
if r.maxDepth <= 0 {
|
||||
return errors.New("max depth exceeded")
|
||||
}
|
||||
if r.maxCalls.count == 0 {
|
||||
if r.maxCalls.count <= 0 {
|
||||
return errors.New("call limit exceeded")
|
||||
}
|
||||
// here we gracefully handle the case in which `any` itself is `nil`, which may occur in message decoding
|
||||
|
||||
@ -54,7 +54,7 @@ func doRejectUnknownFields(
|
||||
if len(bz) == 0 {
|
||||
return hasUnknownNonCriticals, nil
|
||||
}
|
||||
if recursionLimit == 0 {
|
||||
if recursionLimit <= 0 {
|
||||
return false, errors.New("recursion limit reached")
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user