yann@1249: diff -Naurd mpfr-2.4.0-a/PATCHES mpfr-2.4.0-b/PATCHES yann@1249: --- mpfr-2.4.0-a/PATCHES 2009-02-25 13:27:38.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/PATCHES 2009-02-25 13:42:26.000000000 +0000 yann@1249: @@ -0,0 +1 @@ yann@1249: +mpfr_snprintf yann@1249: diff -Naurd mpfr-2.4.0-a/VERSION mpfr-2.4.0-b/VERSION yann@1249: --- mpfr-2.4.0-a/VERSION 2009-02-20 17:27:44.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/VERSION 2009-02-25 13:41:31.000000000 +0000 yann@1249: @@ -1 +1 @@ yann@1249: -2.4.0-p1 yann@1249: +2.4.0-p2 yann@1249: diff -Naurd mpfr-2.4.0-a/mpfr.h mpfr-2.4.0-b/mpfr.h yann@1249: --- mpfr-2.4.0-a/mpfr.h 2009-02-20 17:27:44.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/mpfr.h 2009-02-25 13:41:31.000000000 +0000 yann@1249: @@ -27,7 +27,7 @@ yann@1249: #define MPFR_VERSION_MAJOR 2 yann@1249: #define MPFR_VERSION_MINOR 4 yann@1249: #define MPFR_VERSION_PATCHLEVEL 0 yann@1249: -#define MPFR_VERSION_STRING "2.4.0-p1" yann@1249: +#define MPFR_VERSION_STRING "2.4.0-p2" yann@1249: yann@1249: /* Macros dealing with MPFR VERSION */ yann@1249: #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) yann@1249: diff -Naurd mpfr-2.4.0-a/printf.c mpfr-2.4.0-b/printf.c yann@1249: --- mpfr-2.4.0-a/printf.c 2009-01-26 12:52:01.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/printf.c 2009-02-25 13:41:22.000000000 +0000 yann@1249: @@ -154,16 +154,16 @@ yann@1249: int ret; yann@1249: size_t min_size; yann@1249: yann@1249: - /* C99 allows SIZE to be null */ yann@1249: - if (size == 0) yann@1249: - return 0; yann@1249: - yann@1249: - MPFR_ASSERTD (buf != NULL); yann@1249: - yann@1249: GET_STR (ret, str, fmt); yann@1249: - min_size = (size_t)ret < size ? (size_t)ret : size - 1; yann@1249: - strncpy (buf, str, min_size); yann@1249: - buf[min_size + 1] = '\0'; yann@1249: + yann@1249: + /* C99 allows SIZE to be zero */ yann@1249: + if (size != 0) yann@1249: + { yann@1249: + MPFR_ASSERTN (buf != NULL); yann@1249: + min_size = (size_t)ret < size ? (size_t)ret : size - 1; yann@1249: + strncpy (buf, str, min_size); yann@1249: + buf[min_size] = '\0'; yann@1249: + } yann@1249: yann@1249: mpfr_free_str (str); yann@1249: return ret; yann@1249: @@ -176,16 +176,17 @@ yann@1249: int ret; yann@1249: int min_size; yann@1249: yann@1249: - /* C99 allows SIZE to be null */ yann@1249: - if (size == 0) yann@1249: - return 0; yann@1249: + GET_STR_VA (ret, str, fmt, ap); yann@1249: yann@1249: - MPFR_ASSERTD (buf != NULL); yann@1249: + /* C99 allows SIZE to be zero */ yann@1249: + if (size != 0) yann@1249: + { yann@1249: + MPFR_ASSERTN (buf != NULL); yann@1249: + min_size = (size_t)ret < size ? (size_t)ret : size - 1; yann@1249: + strncpy (buf, str, min_size); yann@1249: + buf[min_size] = '\0'; yann@1249: + } yann@1249: yann@1249: - GET_STR_VA (ret, str, fmt, ap); yann@1249: - min_size = (size_t)ret < size ? (size_t)ret : size - 1; yann@1249: - strncpy (buf, str, min_size); yann@1249: - buf[min_size + 1] = '\0'; yann@1249: mpfr_free_str (str); yann@1249: return ret; yann@1249: } yann@1249: diff -Naurd mpfr-2.4.0-a/tests/tsprintf.c mpfr-2.4.0-b/tests/tsprintf.c yann@1249: --- mpfr-2.4.0-a/tests/tsprintf.c 2009-01-26 12:52:00.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/tests/tsprintf.c 2009-02-25 13:41:22.000000000 +0000 yann@1249: @@ -72,21 +72,37 @@ yann@1249: yann@1249: /* test mpfr_snprintf */ yann@1249: p = (int) (randlimb () % n0); yann@1249: - n1 = mpfr_snprintf (buffer, p, fmt, x); yann@1249: - if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0)) yann@1249: + if (p == 0 && (randlimb () & 1) == 0) yann@1249: + { yann@1249: + n1 = mpfr_snprintf (NULL, 0, fmt, x); yann@1249: + } yann@1249: + else yann@1249: + { yann@1249: + buffer[p] = 17; yann@1249: + n1 = mpfr_snprintf (buffer, p, fmt, x); yann@1249: + if (buffer[p] != 17) yann@1249: + { yann@1249: + printf ("Buffer overflow in mpfr_snprintf for p = %d!\n", p); yann@1249: + exit (1); yann@1249: + } yann@1249: + } yann@1249: + if (n0 != n1) yann@1249: { yann@1249: printf ("Error in mpfr_snprintf (s, %d, \"%s\", x) return value\n", yann@1249: p, fmt); yann@1249: printf ("expected: %d\ngot: %d\n", n0, n1); yann@1249: exit (1); yann@1249: } yann@1249: - if (strncmp (expected, buffer, p) != 0) yann@1249: + if ((p > 1 && strncmp (expected, buffer, p-1) != 0) yann@1249: + || (p == 1 && buffer[0] != '\0')) yann@1249: { yann@1249: - printf ("Error in mpfr_snprintf (s, %d, \"%s\", x);\n", p, fmt); yann@1249: - printf ("expected: \"%s\"\ngot: \"%s\"\n", expected, buffer); yann@1249: + char part_expected[p]; yann@1249: + strncpy (part_expected, expected, p); yann@1249: + part_expected[p-1] = '\0'; yann@1249: + printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt); yann@1249: + printf ("expected: \"%s\"\ngot: \"%s\"\n", part_expected, buffer); yann@1249: exit (1); yann@1249: } yann@1249: - yann@1249: return n0; yann@1249: } yann@1249: yann@1249: @@ -116,8 +132,21 @@ yann@1249: yann@1249: /* test mpfr_snprintf */ yann@1249: p = (int) (randlimb () % n0); yann@1249: - n1 = mpfr_vsnprintf (buffer, p, fmt, ap1); yann@1249: - if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0)) yann@1249: + if (p == 0 && (randlimb () & 1) == 0) yann@1249: + { yann@1249: + n1 = mpfr_vsnprintf (NULL, 0, fmt, ap1); yann@1249: + } yann@1249: + else yann@1249: + { yann@1249: + buffer[p] = 17; yann@1249: + n1 = mpfr_vsnprintf (buffer, p, fmt, ap1); yann@1249: + if (buffer[p] != 17) yann@1249: + { yann@1249: + printf ("Buffer overflow in mpfr_vsnprintf for p = %d!\n", p); yann@1249: + exit (1); yann@1249: + } yann@1249: + } yann@1249: + if (n0 != n1) yann@1249: { yann@1249: printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...) return value\n", yann@1249: p, fmt); yann@1249: @@ -126,10 +155,14 @@ yann@1249: va_end (ap1); yann@1249: exit (1); yann@1249: } yann@1249: - if (strncmp (expected, buffer, p) != 0) yann@1249: + if ((p > 1 && strncmp (expected, buffer, p-1) != 0) yann@1249: + || (p == 1 && buffer[0] != '\0')) yann@1249: { yann@1249: + char part_expected[p]; yann@1249: + strncpy (part_expected, expected, p); yann@1249: + part_expected[p-1] = '\0'; yann@1249: printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt); yann@1249: - printf ("expected: \"%s\"\ngot: \"%s\"\n", expected, buffer); yann@1249: + printf ("expected: \"%s\"\ngot: \"%s\"\n", part_expected, buffer); yann@1249: yann@1249: va_end (ap1); yann@1249: exit (1); yann@1249: diff -Naurd mpfr-2.4.0-a/version.c mpfr-2.4.0-b/version.c yann@1249: --- mpfr-2.4.0-a/version.c 2009-02-20 17:27:44.000000000 +0000 yann@1249: +++ mpfr-2.4.0-b/version.c 2009-02-25 13:41:31.000000000 +0000 yann@1249: @@ -25,5 +25,5 @@ yann@1249: const char * yann@1249: mpfr_get_version (void) yann@1249: { yann@1249: - return "2.4.0-p1"; yann@1249: + return "2.4.0-p2"; yann@1249: }