mini-gmp: mpz_abs_sub_bit needs more normalization

Niels Möller nisse at
Mon Aug 25 21:21:05 UTC 2014

I've found a bug in mini-gmp. mpz_clrbit fails and produces an
unnormalized mpz, if one clears the most significant one bit of a
number, and that one bit is followed by a long string of zeros.


--- a/mini-gmp.c
+++ b/mini-gmp.c
@@ -3569,7 +3569,7 @@ mpz_abs_sub_bit (mpz_t d, mp_bitcnt_t bit_index)
   gmp_assert_nocarry (mpn_sub_1 (dp + limb_index, dp + limb_index,
 				 dn - limb_index, bit));
-  dn -= (dp[dn-1] == 0);
+  dn = mpn_normalized_size (dp, dn);
   d->_mp_size = (d->_mp_size < 0) ? - dn : dn;
We should also add a test case.


Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.

More information about the gmp-bugs mailing list