]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-71810: Fix _PyLong_AsByteArray() undefined behavior (#138873)
authorVictor Stinner <vstinner@python.org>
Sun, 14 Sep 2025 09:25:53 +0000 (11:25 +0200)
committerGitHub <noreply@github.com>
Sun, 14 Sep 2025 09:25:53 +0000 (11:25 +0200)
Don't read p[-1] when p is an empty string: when n==0.

Objects/longobject.c

index 63b48572ff20d3a142d656b9ce415786eef74eca..dba190d840ca42fc18bcf7ef938c85b8548d62f2 100644 (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;