From 2065373f67b126edfc3e0f2519aaad0956902c14 Mon Sep 17 00:00:00 2001 From: Damien George 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 166fa7adbe..e0475d60a1 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 e0d0935a48..2dabe80ecf 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)