segfault in mpz_divexact()

Antony Dovgal antony at zend.com
Wed Apr 18 15:06:06 CEST 2007


Hello all.

The code below segfaults on Linux x86 using GMP 4.2.1 compiled with GCC 3.3.5.
I know that the function is expected to return correct results only if/when A 
is known to be divisible by B, but I can't find anywhere in the docs that segfault is ok too.
Hence the report.

#include <stdlib.h>
#include <gmp.h>

int main() {
    mpz_t a, b, res;

    mpz_init(res);
    mpz_init_set_si(a, 5);
    /* does not segfault */
    /* mpz_init_set_str(b, "233", 0); */

    /* segfaults */
    mpz_init_set_str(b, "23345555555555555555555555", 0);

    mpz_divexact(res, a, b);

    return 0;
}

GDB backtrace is not very informative.
With -O0 -g:

#0  __gmpn_copyi () at tmp-copyi.s:75
#1  0x40048fc8 in __gmpz_divexact (quot=0xbfffef40, num=0xbfffef60, den=0xbfffef50) at divexact.c:113

Without:

#0  0x4006f09d in __gmp_exception () from /usr/lib/libgmp.so.3
#1  0x4006f0ce in __gmp_divide_by_zero () from /usr/lib/libgmp.so.3
#2  0x400794ca in __gmpz_divexact () from /usr/lib/libgmp.so.3

If you need any other information - let me know, I'd be happy to help.

-- 
Wbr, 
Antony Dovgal


More information about the gmp-bugs mailing list