- dest_size = str_size / __mp_bases[base].chars_per_limb + 1;
- if (dest->_mp_alloc < dest_size)
- _mpz_realloc (dest, dest_size);
+ /* Make sure the string is not empty, mpn_set_str would fail. */
+ if (str_size == 0)
+ {
+ x->_mp_size = 0;
+ (*_mp_free_func) (str, alloc_size);
+ return nread;
+ }
+
+ xsize = (((mp_size_t) (str_size / __mp_bases[base].chars_per_bit_exactly))
+ / BITS_PER_MP_LIMB + 2);
+ if (x->_mp_alloc < xsize)
+ _mpz_realloc (x, xsize);