gh-71810: Fix _PyLong_AsByteArray() undefined behavior (#138873)

Don't read p[-1] when p is an empty string: when n==0.
This commit is contained in:
Victor Stinner
2025-09-14 11:25:53 +02:00
committed by GitHub
parent 7168e98c80
commit 8b5ce31c2b

View File

@@ -1214,8 +1214,14 @@ _PyLong_AsByteArray(PyLongObject* v,
just above didn't get to ensure there's a sign bit, and the
loop below wouldn't add one either. Make sure a sign bit
exists. */
unsigned char msb = *(p - pincr);
int sign_bit_set = msb >= 0x80;
int sign_bit_set;
if (n > 0) {
unsigned char msb = *(p - pincr);
sign_bit_set = msb >= 0x80;
}
else {
sign_bit_set = 0;
}
assert(accumbits == 0);
if (sign_bit_set == do_twos_comp)
return 0;