[Python-checkins] cpython: Issue #27214: Fix potential bug and remove useless optimization in long_invert.

mark.dickinson python-checkins at python.org
Mon Aug 29 11:40:40 EDT 2016


https://hg.python.org/cpython/rev/6e1d38674b17
changeset:   102938:6e1d38674b17
user:        Mark Dickinson <dickinsm at gmail.com>
date:        Mon Aug 29 16:40:29 2016 +0100
summary:
  Issue #27214: Fix potential bug and remove useless optimization in long_invert. Thanks Oren Milman.

files:
  Misc/NEWS            |  4 ++++
  Objects/longobject.c |  6 ++++--
  2 files changed, 8 insertions(+), 2 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@
 Core and Builtins
 -----------------
 
+- Issue #27214: In long_invert, be more careful about modifying object
+  returned by long_add, and remove an unnecessary check for small longs.
+  Thanks Oren Milman for analysis and patch.
+
 - Issue #27506: Support passing the bytes/bytearray.translate() "delete"
   argument by keyword.
 
diff --git a/Objects/longobject.c b/Objects/longobject.c
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -4170,8 +4170,10 @@
     Py_DECREF(w);
     if (x == NULL)
         return NULL;
-    Py_SIZE(x) = -(Py_SIZE(x));
-    return (PyObject *)maybe_small_long(x);
+    _PyLong_Negate(&x);
+    /* No need for maybe_small_long here, since any small
+       longs will have been caught in the Py_SIZE <= 1 fast path. */
+    return (PyObject *)x;
 }
 
 static PyObject *

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list