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