summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-10-01 22:35:06 +0100
committerDamien George <damien.p.george@gmail.com>2015-10-01 22:35:06 +0100
commit2065373f67b126edfc3e0f2519aaad0956902c14 (patch)
treeecfd697b35b0bc1c883b845c1be625578deafc8f
parenta81539db25d443826e5247fefda8ae73bad64056 (diff)
downloadmicropython-2065373f67b126edfc3e0f2519aaad0956902c14.tar.gz
micropython-2065373f67b126edfc3e0f2519aaad0956902c14.zip
py/mpz: Fix bignum anding of large negative with smaller positive int.
-rw-r--r--py/mpz.c8
-rw-r--r--tests/basics/int_big_and.py2
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)