diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES --- mpfr-3.1.2-a/PATCHES 2014-06-30 15:17:53.337268149 +0000 +++ mpfr-3.1.2-b/PATCHES 2014-06-30 15:17:53.417270314 +0000 @@ -0,0 +1 @@ +vasprintf diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION --- mpfr-3.1.2-a/VERSION 2014-06-30 15:17:53.337268149 +0000 +++ mpfr-3.1.2-b/VERSION 2014-06-30 15:17:53.413270206 +0000 @@ -1 +1 @@ -3.1.2-p9 +3.1.2-p10 diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h --- mpfr-3.1.2-a/src/mpfr.h 2014-06-30 15:17:53.337268149 +0000 +++ mpfr-3.1.2-b/src/mpfr.h 2014-06-30 15:17:53.413270206 +0000 @@ -27,7 +27,7 @@ #define MPFR_VERSION_MAJOR 3 #define MPFR_VERSION_MINOR 1 #define MPFR_VERSION_PATCHLEVEL 2 -#define MPFR_VERSION_STRING "3.1.2-p9" +#define MPFR_VERSION_STRING "3.1.2-p10" /* Macros dealing with MPFR VERSION */ #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) diff -Naurd mpfr-3.1.2-a/src/vasprintf.c mpfr-3.1.2-b/src/vasprintf.c --- mpfr-3.1.2-a/src/vasprintf.c 2013-11-15 00:51:49.267334408 +0000 +++ mpfr-3.1.2-b/src/vasprintf.c 2014-06-30 15:17:53.377269231 +0000 @@ -884,14 +884,18 @@ first digit, we want the exponent for radix two and the decimal point AFTER the first digit. */ { - MPFR_ASSERTN (exp > MPFR_EMIN_MIN /4); /* possible overflow */ + /* An integer overflow is normally not possible since MPFR_EXP_MIN + is twice as large as MPFR_EMIN_MIN. */ + MPFR_ASSERTN (exp > (MPFR_EXP_MIN + 3) / 4); exp = (exp - 1) * 4; } else /* EXP is the exponent for decimal point BEFORE the first digit, we want the exponent for decimal point AFTER the first digit. */ { - MPFR_ASSERTN (exp > MPFR_EMIN_MIN); /* possible overflow */ + /* An integer overflow is normally not possible since MPFR_EXP_MIN + is twice as large as MPFR_EMIN_MIN. */ + MPFR_ASSERTN (exp > MPFR_EXP_MIN); --exp; } } diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c --- mpfr-3.1.2-a/src/version.c 2014-06-30 15:17:53.337268149 +0000 +++ mpfr-3.1.2-b/src/version.c 2014-06-30 15:17:53.413270206 +0000 @@ -25,5 +25,5 @@ const char * mpfr_get_version (void) { - return "3.1.2-p9"; + return "3.1.2-p10"; } diff -Naurd mpfr-3.1.2-a/tests/tsprintf.c mpfr-3.1.2-b/tests/tsprintf.c --- mpfr-3.1.2-a/tests/tsprintf.c 2013-11-15 00:51:49.267334408 +0000 +++ mpfr-3.1.2-b/tests/tsprintf.c 2014-06-30 15:17:53.377269231 +0000 @@ -1184,6 +1184,69 @@ check_emax_aux (MPFR_EMAX_MAX); } +static void +check_emin_aux (mpfr_exp_t e) +{ + mpfr_t x; + char *s1, s2[256]; + int i; + mpfr_exp_t emin; + mpz_t ee; + + MPFR_ASSERTN (e >= LONG_MIN); + emin = mpfr_get_emin (); + set_emin (e); + + mpfr_init2 (x, 16); + mpz_init (ee); + + mpfr_setmin (x, e); + mpz_set_si (ee, e); + mpz_sub_ui (ee, ee, 1); + + i = mpfr_asprintf (&s1, "%Ra", x); + MPFR_ASSERTN (i > 0); + + gmp_snprintf (s2, 256, "0x1p%Zd", ee); + + if (strcmp (s1, s2) != 0) + { + printf ("Error in check_emin_aux for emin = %ld\n", (long) e); + printf ("Expected %s\n", s2); + printf ("Got %s\n", s1); + exit (1); + } + + mpfr_free_str (s1); + + i = mpfr_asprintf (&s1, "%Rb", x); + MPFR_ASSERTN (i > 0); + + gmp_snprintf (s2, 256, "1p%Zd", ee); + + if (strcmp (s1, s2) != 0) + { + printf ("Error in check_emin_aux for emin = %ld\n", (long) e); + printf ("Expected %s\n", s2); + printf ("Got %s\n", s1); + exit (1); + } + + mpfr_free_str (s1); + + mpfr_clear (x); + mpz_clear (ee); + set_emin (emin); +} + +static void +check_emin (void) +{ + check_emin_aux (-15); + check_emin_aux (mpfr_get_emin ()); + check_emin_aux (MPFR_EMIN_MIN); +} + int main (int argc, char **argv) { @@ -1203,6 +1266,7 @@ decimal (); mixed (); check_emax (); + check_emin (); #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) locale_da_DK ();