When creating int instances, we always allocate space for and initialise at least one digit, since the medium_value function that's used for fast paths assumes the existence of that digit. This change was introduced for Python 3.11 in PR #27832.
However, the corresponding change in long_subtype_new was missed; this results in us asking for zero digits in the case of creating an instance of a subclass of int with value zero - e.g.,
classMyInt(int):
passmyint=MyInt() # problem
That's then a problem if myint is used in a context where medium_value might be called on it, for example as in int(myint).
We've got away with this so far because of a compensating overallocation issue: see #81381; this bug blocked an attempt to address #81381 in #100855. But I believe this should still be fixed.
When creating
int
instances, we always allocate space for and initialise at least one digit, since themedium_value
function that's used for fast paths assumes the existence of that digit. This change was introduced for Python 3.11 in PR #27832.However, the corresponding change in
long_subtype_new
was missed; this results in us asking for zero digits in the case of creating an instance of a subclass ofint
with value zero - e.g.,That's then a problem if
myint
is used in a context wheremedium_value
might be called on it, for example as inint(myint)
.We've got away with this so far because of a compensating overallocation issue: see #81381; this bug blocked an attempt to address #81381 in #100855. But I believe this should still be fixed.
I'll make a PR shortly.
Linked PRs
The text was updated successfully, but these errors were encountered: