]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-71810: Fix _PyLong_AsByteArray() undefined behavior (GH-138873) (#138883)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 7 Oct 2025 17:38:40 +0000 (19:38 +0200)
committerGitHub <noreply@github.com>
Tue, 7 Oct 2025 17:38:40 +0000 (19:38 +0200)
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>
Objects/longobject.c

index cc061ffbe6b24e0c7707b6d5938ee1cef9b72b52..ec2b8fc4182643be71ab7adce9012c141da46b7a 100644 (file)
@@ -1143,8 +1143,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;