Description
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.,
class MyInt(int):
pass
myint = 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.
I'll make a PR shortly.