gh-71810: Fix _PyLong_AsByteArray() undefined behavior (GH-138873)
Don't read p[-1] when p is an empty string: when n==0.
(cherry picked from commit
8b5ce31c2b44d9bf82e6119e90a52dd530bfd1db)
Co-authored-by: Victor Stinner <vstinner@python.org>
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;