patches/mpfr/2.4.0/110-mpfr_snprintf.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
     1 diff -Naurd mpfr-2.4.0-a/PATCHES mpfr-2.4.0-b/PATCHES
     2 --- mpfr-2.4.0-a/PATCHES	2009-02-25 13:27:38.000000000 +0000
     3 +++ mpfr-2.4.0-b/PATCHES	2009-02-25 13:42:26.000000000 +0000
     4 @@ -0,0 +1 @@
     5 +mpfr_snprintf
     6 diff -Naurd mpfr-2.4.0-a/VERSION mpfr-2.4.0-b/VERSION
     7 --- mpfr-2.4.0-a/VERSION	2009-02-20 17:27:44.000000000 +0000
     8 +++ mpfr-2.4.0-b/VERSION	2009-02-25 13:41:31.000000000 +0000
     9 @@ -1 +1 @@
    10 -2.4.0-p1
    11 +2.4.0-p2
    12 diff -Naurd mpfr-2.4.0-a/mpfr.h mpfr-2.4.0-b/mpfr.h
    13 --- mpfr-2.4.0-a/mpfr.h	2009-02-20 17:27:44.000000000 +0000
    14 +++ mpfr-2.4.0-b/mpfr.h	2009-02-25 13:41:31.000000000 +0000
    15 @@ -27,7 +27,7 @@
    16  #define MPFR_VERSION_MAJOR 2
    17  #define MPFR_VERSION_MINOR 4
    18  #define MPFR_VERSION_PATCHLEVEL 0
    19 -#define MPFR_VERSION_STRING "2.4.0-p1"
    20 +#define MPFR_VERSION_STRING "2.4.0-p2"
    21  
    22  /* Macros dealing with MPFR VERSION */
    23  #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    24 diff -Naurd mpfr-2.4.0-a/printf.c mpfr-2.4.0-b/printf.c
    25 --- mpfr-2.4.0-a/printf.c	2009-01-26 12:52:01.000000000 +0000
    26 +++ mpfr-2.4.0-b/printf.c	2009-02-25 13:41:22.000000000 +0000
    27 @@ -154,16 +154,16 @@
    28    int ret;
    29    size_t min_size;
    30  
    31 -  /* C99 allows SIZE to be null */
    32 -  if (size == 0)
    33 -    return 0;
    34 -
    35 -  MPFR_ASSERTD (buf != NULL);
    36 -
    37    GET_STR (ret, str, fmt);
    38 -  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    39 -  strncpy (buf, str, min_size);
    40 -  buf[min_size + 1] = '\0';
    41 +
    42 +  /* C99 allows SIZE to be zero */
    43 +  if (size != 0)
    44 +    {
    45 +      MPFR_ASSERTN (buf != NULL);
    46 +      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    47 +      strncpy (buf, str, min_size);
    48 +      buf[min_size] = '\0';
    49 +    }
    50  
    51    mpfr_free_str (str);
    52    return ret;
    53 @@ -176,16 +176,17 @@
    54    int ret;
    55    int min_size;
    56  
    57 -  /* C99 allows SIZE to be null */
    58 -  if (size == 0)
    59 -    return 0;
    60 +  GET_STR_VA (ret, str, fmt, ap);
    61  
    62 -  MPFR_ASSERTD (buf != NULL);
    63 +  /* C99 allows SIZE to be zero */
    64 +  if (size != 0)
    65 +    {
    66 +      MPFR_ASSERTN (buf != NULL);
    67 +      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    68 +      strncpy (buf, str, min_size);
    69 +      buf[min_size] = '\0';
    70 +    }
    71  
    72 -  GET_STR_VA (ret, str, fmt, ap);
    73 -  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    74 -  strncpy (buf, str, min_size);
    75 -  buf[min_size + 1] = '\0';
    76    mpfr_free_str (str);
    77    return ret;
    78  }
    79 diff -Naurd mpfr-2.4.0-a/tests/tsprintf.c mpfr-2.4.0-b/tests/tsprintf.c
    80 --- mpfr-2.4.0-a/tests/tsprintf.c	2009-01-26 12:52:00.000000000 +0000
    81 +++ mpfr-2.4.0-b/tests/tsprintf.c	2009-02-25 13:41:22.000000000 +0000
    82 @@ -72,21 +72,37 @@
    83  
    84    /* test mpfr_snprintf */
    85    p = (int) (randlimb () % n0);
    86 -  n1 = mpfr_snprintf (buffer, p, fmt, x);
    87 -  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
    88 +  if (p == 0 && (randlimb () & 1) == 0)
    89 +    {
    90 +      n1 = mpfr_snprintf (NULL, 0, fmt, x);
    91 +    }
    92 +  else
    93 +    {
    94 +      buffer[p] = 17;
    95 +      n1 = mpfr_snprintf (buffer, p, fmt, x);
    96 +      if (buffer[p] != 17)
    97 +        {
    98 +          printf ("Buffer overflow in mpfr_snprintf for p = %d!\n", p);
    99 +          exit (1);
   100 +        }
   101 +    }
   102 +  if (n0 != n1)
   103      {
   104        printf ("Error in mpfr_snprintf (s, %d, \"%s\", x) return value\n",
   105                p, fmt);
   106        printf ("expected: %d\ngot:      %d\n", n0, n1);
   107        exit (1);
   108      }
   109 -  if (strncmp (expected, buffer, p) != 0)
   110 +  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   111 +      || (p == 1 && buffer[0] != '\0'))
   112      {
   113 -      printf ("Error in mpfr_snprintf (s, %d, \"%s\", x);\n", p, fmt);
   114 -      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   115 +      char part_expected[p];
   116 +      strncpy (part_expected, expected, p);
   117 +      part_expected[p-1] = '\0';
   118 +      printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   119 +      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   120        exit (1);
   121      }
   122 -
   123    return n0;
   124  }
   125  
   126 @@ -116,8 +132,21 @@
   127  
   128    /* test mpfr_snprintf */
   129    p = (int) (randlimb () % n0);
   130 -  n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   131 -  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
   132 +  if (p == 0 && (randlimb () & 1) == 0)
   133 +    {
   134 +      n1 = mpfr_vsnprintf (NULL, 0, fmt, ap1);
   135 +    }
   136 +  else
   137 +    {
   138 +      buffer[p] = 17;
   139 +      n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   140 +      if (buffer[p] != 17)
   141 +        {
   142 +          printf ("Buffer overflow in mpfr_vsnprintf for p = %d!\n", p);
   143 +          exit (1);
   144 +        }
   145 +    }
   146 +  if (n0 != n1)
   147      {
   148        printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...) return value\n",
   149                p, fmt);
   150 @@ -126,10 +155,14 @@
   151        va_end (ap1);
   152        exit (1);
   153      }
   154 -  if (strncmp (expected, buffer, p) != 0)
   155 +  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   156 +      || (p == 1 && buffer[0] != '\0'))
   157      {
   158 +      char part_expected[p];
   159 +      strncpy (part_expected, expected, p);
   160 +      part_expected[p-1] = '\0';
   161        printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   162 -      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   163 +      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   164  
   165        va_end (ap1);
   166        exit (1);
   167 diff -Naurd mpfr-2.4.0-a/version.c mpfr-2.4.0-b/version.c
   168 --- mpfr-2.4.0-a/version.c	2009-02-20 17:27:44.000000000 +0000
   169 +++ mpfr-2.4.0-b/version.c	2009-02-25 13:41:31.000000000 +0000
   170 @@ -25,5 +25,5 @@
   171  const char *
   172  mpfr_get_version (void)
   173  {
   174 -  return "2.4.0-p1";
   175 +  return "2.4.0-p2";
   176  }