From 2065373f67b126edfc3e0f2519aaad0956902c14 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 1 Oct 2015 22:35:06 +0100
Subject: [PATCH] py/mpz: Fix bignum anding of large negative with smaller
 positive int.

---
 py/mpz.c                    | 8 ++------
 tests/basics/int_big_and.py | 2 ++
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/py/mpz.c b/py/mpz.c
index 166fa7adb..e0475d60a 100644
--- a/py/mpz.c
+++ b/py/mpz.c
@@ -239,12 +239,8 @@ STATIC mp_uint_t mpn_and_neg(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t j
         carry >>= DIG_SIZE;
     }
 
-    if (carry != 0) {
-        *idig = carry;
-    } else {
-        // remove trailing zeros
-        for (--idig; idig >= oidig && *idig == 0; --idig) {
-        }
+    // remove trailing zeros
+    for (--idig; idig >= oidig && *idig == 0; --idig) {
     }
 
     return idig + 1 - oidig;
diff --git a/tests/basics/int_big_and.py b/tests/basics/int_big_and.py
index e0d0935a4..2dabe80ec 100644
--- a/tests/basics/int_big_and.py
+++ b/tests/basics/int_big_and.py
@@ -24,3 +24,5 @@ print(-2345678901234567890123456789 & a)
 print((-a) & a)
 print((-a) & 0xffffffff)
 print((-a) & 0xffffffffffffffffffffffffffffffff)
+print((-a) & 2)
+print((-(1 << 70)) & 2)
-- 
GitLab