-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
types: ParseCoinNormalized may panic for very large values #11732
Comments
The testcase triggers a panic, "NewIntFromBigInt() out of bound", in types.Dec.TruncateInt as detailed in cosmos#11732.
The testcase triggers a panic, "NewIntFromBigInt() out of bound", in types.Dec.TruncateInt as detailed in #11732.
@elias-orijtech since we have a diff posted, would you be open to opening a PR? cc @ValarDragon for decimal types visibility. |
Sure, but I'm waiting for someone with more knowledge before posting a PR that deletes or updates the two test cases my suggested fix break.
|
I'm fine w/ changing the behavior to force parsing of ints to be one minus the perceived logical maximum bit length! Doesn't break anything Osmosis depends upon, I'd be a bit surprised if it broke things for other folks. |
@elias-orijtech I think the change is OK. |
…ecisionBits As found by OSS-Fuzz, large numbers may overflow the current maxDecBitLen because it assumes that DecimalPrecisionBits (60) can always be represented by Precision (18) base-10 digits. Since 2^60 is larger than 2^18, this assumption is false. This change fixes cosmos#11732 by only allowing 59 bits of precision on top of the 256 maxBitLen allowed for the integer part.
…ecisionBits (#11772) ## Description Closes: #11732 As found by OSS-Fuzz, large numbers may overflow the current maxDecBitLen because it assumes that DecimalPrecisionBits (60) can always be represented by Precision (18) base-10 digits. Since 2^60 is larger than 2^18, this assumption is false. This change fixes #11732 by only allowing 59 bits of precision on top of the 256 maxBitLen allowed for the integer part. --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [x] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules) - [x] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [x] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
…ecisionBits (#11772) ## Description Closes: #11732 As found by OSS-Fuzz, large numbers may overflow the current maxDecBitLen because it assumes that DecimalPrecisionBits (60) can always be represented by Precision (18) base-10 digits. Since 2^60 is larger than 2^18, this assumption is false. This change fixes #11732 by only allowing 59 bits of precision on top of the 256 maxBitLen allowed for the integer part. --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [x] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules) - [x] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [x] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) (cherry picked from commit f9913c1) # Conflicts: # CHANGELOG.md
…ecisionBits (#11772) ## Description Closes: #11732 As found by OSS-Fuzz, large numbers may overflow the current maxDecBitLen because it assumes that DecimalPrecisionBits (60) can always be represented by Precision (18) base-10 digits. Since 2^60 is larger than 2^18, this assumption is false. This change fixes #11732 by only allowing 59 bits of precision on top of the 256 maxBitLen allowed for the integer part. --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [x] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules) - [x] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [x] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) (cherry picked from commit f9913c1) # Conflicts: # CHANGELOG.md
The testcase triggers a panic, "NewIntFromBigInt() out of bound", in types.Dec.TruncateInt as detailed in cosmos#11732.
The testcase triggers a panic, "NewIntFromBigInt() out of bound", in types.Dec.TruncateInt as detailed in #11732.
Adding this testcase found by OSS-Fuzz,
results in a panic:
The issue is that the maxDecBitLen limit assumes that chopping the decimal part of a
maxDecBitLen
-long types.Dec number will always result in a 60 (DecimalPrecisionBits
) bits shorter integer, which fits in 256 bits(maxBitLen
). However, because 10^18 (Precision
) is less than 2^60, this is not true.An obvious fix is to limit
maxDecBitLen
:However, that results in test failures because some large values no longer fit into a types.Dec:
Version
git revision b518c84
CC @odeke-em.
For Admin Use
The text was updated successfully, but these errors were encountered: