fix: raise ValidationError for out-of-range int→float in convert - #1128
Open
takerukondo wants to merge 2 commits into
Open
fix: raise ValidationError for out-of-range int→float in convert#1128takerukondo wants to merge 2 commits into
takerukondo wants to merge 2 commits into
Conversation
PyLong_AsDouble sets OverflowError for ints that cannot fit in a finite C double. convert was returning a float while that exception stayed set, which leaked SystemError. Match json.decode and report ValidationError. Fixes msgspec#1122 Co-authored-by: Cursor <cursoragent@cursor.com>
takerukondo
had a problem deploying
to
docs-preview
July 20, 2026 04:33 — with
GitHub Actions
Failure
Co-authored-by: Cursor <cursoragent@cursor.com>
takerukondo
had a problem deploying
to
docs-preview
July 20, 2026 04:33 — with
GitHub Actions
Failure
Comment on lines
+20941
to
+20942
| /* PyLong_AsDouble sets OverflowError and may return ±inf for ints that | ||
| * cannot be represented as a finite C double. Surface that as a |
Member
There was a problem hiding this comment.
Where are you getting the
return ±inf for ints that cannot be represented as a finite C double
part from? It's at least not stated in the documentation: https://docs.python.org/3/c-api/long.html#c.PyLong_AsDouble
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #1122.
msgspec.convert(10**400, float)was leakingSystemErrorbecausePyLong_AsDoublesetsOverflowErrorwhileconvertstill returned a float object.json.decodealready reports this asValidationError: Number out of range.Clear the overflow error and raise
ValidationError(same message as the JSON path). Also reject non-finite results as a belt-and-suspenders check.Test plan
pytest tests/unit/test_convert.py::TestFloat::test_float_from_out_of_range_int tests/unit/test_convert.py::TestFloat::test_floatMade with Cursor