1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/mpfr/2.4.0/110-mpfr_snprintf.patch Tue Aug 24 00:15:36 2010 +0200
1.3 @@ -0,0 +1,176 @@
1.4 +diff -Naurd mpfr-2.4.0-a/PATCHES mpfr-2.4.0-b/PATCHES
1.5 +--- mpfr-2.4.0-a/PATCHES 2009-02-25 13:27:38.000000000 +0000
1.6 ++++ mpfr-2.4.0-b/PATCHES 2009-02-25 13:42:26.000000000 +0000
1.7 +@@ -0,0 +1 @@
1.8 ++mpfr_snprintf
1.9 +diff -Naurd mpfr-2.4.0-a/VERSION mpfr-2.4.0-b/VERSION
1.10 +--- mpfr-2.4.0-a/VERSION 2009-02-20 17:27:44.000000000 +0000
1.11 ++++ mpfr-2.4.0-b/VERSION 2009-02-25 13:41:31.000000000 +0000
1.12 +@@ -1 +1 @@
1.13 +-2.4.0-p1
1.14 ++2.4.0-p2
1.15 +diff -Naurd mpfr-2.4.0-a/mpfr.h mpfr-2.4.0-b/mpfr.h
1.16 +--- mpfr-2.4.0-a/mpfr.h 2009-02-20 17:27:44.000000000 +0000
1.17 ++++ mpfr-2.4.0-b/mpfr.h 2009-02-25 13:41:31.000000000 +0000
1.18 +@@ -27,7 +27,7 @@
1.19 + #define MPFR_VERSION_MAJOR 2
1.20 + #define MPFR_VERSION_MINOR 4
1.21 + #define MPFR_VERSION_PATCHLEVEL 0
1.22 +-#define MPFR_VERSION_STRING "2.4.0-p1"
1.23 ++#define MPFR_VERSION_STRING "2.4.0-p2"
1.24 +
1.25 + /* Macros dealing with MPFR VERSION */
1.26 + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
1.27 +diff -Naurd mpfr-2.4.0-a/printf.c mpfr-2.4.0-b/printf.c
1.28 +--- mpfr-2.4.0-a/printf.c 2009-01-26 12:52:01.000000000 +0000
1.29 ++++ mpfr-2.4.0-b/printf.c 2009-02-25 13:41:22.000000000 +0000
1.30 +@@ -154,16 +154,16 @@
1.31 + int ret;
1.32 + size_t min_size;
1.33 +
1.34 +- /* C99 allows SIZE to be null */
1.35 +- if (size == 0)
1.36 +- return 0;
1.37 +-
1.38 +- MPFR_ASSERTD (buf != NULL);
1.39 +-
1.40 + GET_STR (ret, str, fmt);
1.41 +- min_size = (size_t)ret < size ? (size_t)ret : size - 1;
1.42 +- strncpy (buf, str, min_size);
1.43 +- buf[min_size + 1] = '\0';
1.44 ++
1.45 ++ /* C99 allows SIZE to be zero */
1.46 ++ if (size != 0)
1.47 ++ {
1.48 ++ MPFR_ASSERTN (buf != NULL);
1.49 ++ min_size = (size_t)ret < size ? (size_t)ret : size - 1;
1.50 ++ strncpy (buf, str, min_size);
1.51 ++ buf[min_size] = '\0';
1.52 ++ }
1.53 +
1.54 + mpfr_free_str (str);
1.55 + return ret;
1.56 +@@ -176,16 +176,17 @@
1.57 + int ret;
1.58 + int min_size;
1.59 +
1.60 +- /* C99 allows SIZE to be null */
1.61 +- if (size == 0)
1.62 +- return 0;
1.63 ++ GET_STR_VA (ret, str, fmt, ap);
1.64 +
1.65 +- MPFR_ASSERTD (buf != NULL);
1.66 ++ /* C99 allows SIZE to be zero */
1.67 ++ if (size != 0)
1.68 ++ {
1.69 ++ MPFR_ASSERTN (buf != NULL);
1.70 ++ min_size = (size_t)ret < size ? (size_t)ret : size - 1;
1.71 ++ strncpy (buf, str, min_size);
1.72 ++ buf[min_size] = '\0';
1.73 ++ }
1.74 +
1.75 +- GET_STR_VA (ret, str, fmt, ap);
1.76 +- min_size = (size_t)ret < size ? (size_t)ret : size - 1;
1.77 +- strncpy (buf, str, min_size);
1.78 +- buf[min_size + 1] = '\0';
1.79 + mpfr_free_str (str);
1.80 + return ret;
1.81 + }
1.82 +diff -Naurd mpfr-2.4.0-a/tests/tsprintf.c mpfr-2.4.0-b/tests/tsprintf.c
1.83 +--- mpfr-2.4.0-a/tests/tsprintf.c 2009-01-26 12:52:00.000000000 +0000
1.84 ++++ mpfr-2.4.0-b/tests/tsprintf.c 2009-02-25 13:41:22.000000000 +0000
1.85 +@@ -72,21 +72,37 @@
1.86 +
1.87 + /* test mpfr_snprintf */
1.88 + p = (int) (randlimb () % n0);
1.89 +- n1 = mpfr_snprintf (buffer, p, fmt, x);
1.90 +- if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
1.91 ++ if (p == 0 && (randlimb () & 1) == 0)
1.92 ++ {
1.93 ++ n1 = mpfr_snprintf (NULL, 0, fmt, x);
1.94 ++ }
1.95 ++ else
1.96 ++ {
1.97 ++ buffer[p] = 17;
1.98 ++ n1 = mpfr_snprintf (buffer, p, fmt, x);
1.99 ++ if (buffer[p] != 17)
1.100 ++ {
1.101 ++ printf ("Buffer overflow in mpfr_snprintf for p = %d!\n", p);
1.102 ++ exit (1);
1.103 ++ }
1.104 ++ }
1.105 ++ if (n0 != n1)
1.106 + {
1.107 + printf ("Error in mpfr_snprintf (s, %d, \"%s\", x) return value\n",
1.108 + p, fmt);
1.109 + printf ("expected: %d\ngot: %d\n", n0, n1);
1.110 + exit (1);
1.111 + }
1.112 +- if (strncmp (expected, buffer, p) != 0)
1.113 ++ if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
1.114 ++ || (p == 1 && buffer[0] != '\0'))
1.115 + {
1.116 +- printf ("Error in mpfr_snprintf (s, %d, \"%s\", x);\n", p, fmt);
1.117 +- printf ("expected: \"%s\"\ngot: \"%s\"\n", expected, buffer);
1.118 ++ char part_expected[p];
1.119 ++ strncpy (part_expected, expected, p);
1.120 ++ part_expected[p-1] = '\0';
1.121 ++ printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
1.122 ++ printf ("expected: \"%s\"\ngot: \"%s\"\n", part_expected, buffer);
1.123 + exit (1);
1.124 + }
1.125 +-
1.126 + return n0;
1.127 + }
1.128 +
1.129 +@@ -116,8 +132,21 @@
1.130 +
1.131 + /* test mpfr_snprintf */
1.132 + p = (int) (randlimb () % n0);
1.133 +- n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
1.134 +- if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
1.135 ++ if (p == 0 && (randlimb () & 1) == 0)
1.136 ++ {
1.137 ++ n1 = mpfr_vsnprintf (NULL, 0, fmt, ap1);
1.138 ++ }
1.139 ++ else
1.140 ++ {
1.141 ++ buffer[p] = 17;
1.142 ++ n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
1.143 ++ if (buffer[p] != 17)
1.144 ++ {
1.145 ++ printf ("Buffer overflow in mpfr_vsnprintf for p = %d!\n", p);
1.146 ++ exit (1);
1.147 ++ }
1.148 ++ }
1.149 ++ if (n0 != n1)
1.150 + {
1.151 + printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...) return value\n",
1.152 + p, fmt);
1.153 +@@ -126,10 +155,14 @@
1.154 + va_end (ap1);
1.155 + exit (1);
1.156 + }
1.157 +- if (strncmp (expected, buffer, p) != 0)
1.158 ++ if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
1.159 ++ || (p == 1 && buffer[0] != '\0'))
1.160 + {
1.161 ++ char part_expected[p];
1.162 ++ strncpy (part_expected, expected, p);
1.163 ++ part_expected[p-1] = '\0';
1.164 + printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
1.165 +- printf ("expected: \"%s\"\ngot: \"%s\"\n", expected, buffer);
1.166 ++ printf ("expected: \"%s\"\ngot: \"%s\"\n", part_expected, buffer);
1.167 +
1.168 + va_end (ap1);
1.169 + exit (1);
1.170 +diff -Naurd mpfr-2.4.0-a/version.c mpfr-2.4.0-b/version.c
1.171 +--- mpfr-2.4.0-a/version.c 2009-02-20 17:27:44.000000000 +0000
1.172 ++++ mpfr-2.4.0-b/version.c 2009-02-25 13:41:31.000000000 +0000
1.173 +@@ -25,5 +25,5 @@
1.174 + const char *
1.175 + mpfr_get_version (void)
1.176 + {
1.177 +- return "2.4.0-p1";
1.178 ++ return "2.4.0-p2";
1.179 + }