]> granicus.if.org Git - python/commitdiff
Issue #27073: Removed redundant checks in long_add and long_sub.
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 3 Jun 2016 21:06:45 +0000 (00:06 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 3 Jun 2016 21:06:45 +0000 (00:06 +0300)
Patch by Oren Milman.

Objects/longobject.c

index 14d2974e92b0479f97d37c54f8ecf57ecc3cd990..473254508fb8ecd1e095ded833db71ea3484eea6 100644 (file)
@@ -3022,8 +3022,14 @@ long_add(PyLongObject *a, PyLongObject *b)
     if (Py_SIZE(a) < 0) {
         if (Py_SIZE(b) < 0) {
             z = x_add(a, b);
-            if (z != NULL && Py_SIZE(z) != 0)
+            if (z != NULL) {
+                /* x_add received at least one multiple-digit int,
+                   and thus z must be a multiple-digit int.
+                   That also means z is not an element of
+                   small_ints, so negating it in-place is safe. */
+                assert(Py_REFCNT(z) == 1);
                 Py_SIZE(z) = -(Py_SIZE(z));
+            }
         }
         else
             z = x_sub(b, a);
@@ -3054,8 +3060,10 @@ long_sub(PyLongObject *a, PyLongObject *b)
             z = x_sub(a, b);
         else
             z = x_add(a, b);
-        if (z != NULL && Py_SIZE(z) != 0)
+        if (z != NULL) {
+            assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
             Py_SIZE(z) = -(Py_SIZE(z));
+        }
     }
     else {
         if (Py_SIZE(b) < 0)