https://github.com/python/cpython/commit/a9020589de6321310720ca550f48793ab5b42d93
commit: a9020589de6321310720ca550f48793ab5b42d93
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: vstinner <[email protected]>
date: 2025-09-14T09:49:23Z
summary:

[3.13] gh-71810: Fix _PyLong_AsByteArray() undefined behavior (GH-138873) 
(#138884)

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 <[email protected]>

files:
M Objects/longobject.c

diff --git a/Objects/longobject.c b/Objects/longobject.c
index 98bf50d01cc079..23f50c7ed28abb 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1046,8 +1046,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;

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to