Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=6fc9e7f2b5469785431aa13932c4a64fe1899203

commit 6fc9e7f2b5469785431aa13932c4a64fe1899203
Author: Marius Cirsta <[email protected]>
Date:   Mon Jun 9 23:45:06 2014 +0300

glibc-2.19-1-x86_64

* version bump

diff --git a/source/base/glibc/FrugalBuild b/source/base/glibc/FrugalBuild
index 4889cbb..098bd58 100644
--- a/source/base/glibc/FrugalBuild
+++ b/source/base/glibc/FrugalBuild
@@ -10,8 +10,8 @@ esac
USE_GLIBC_PORTS=${USE_GLIBC_PORTS:-$USE_GLIBC_PORTS_DEFAULT}

pkgname=glibc
-pkgver=2.16.0
-pkgrel=3
+pkgver=2.19
+pkgrel=1
pkgdesc="GNU C Library"
url="http://www.gnu.org/software/libc/libc.html";
depends=()
@@ -23,13 +23,8 @@ groups=('base' 'chroot-core')
archs=('i686' 'x86_64' 'arm')
Fup2gnubz2
_dlurl="http://ftp.gnu.org/pub/gnu/glibc";
-source=($_dlurl/glibc-$pkgver.tar.xz \
-       glibc-2.14-revert-4768ae77.patch \
-       glibc-2.15-lddebug-scopes.patch \
-       glibc-2.15-revert-c5a0802a.patch \
-       glibc-2.16-strncasecmp-segfault.patch \
-       glibc-2.16-strtod-overflow.patch)
-signatures=($_dlurl/glibc-$pkgver.tar.xz.sig '' '' '' '' '')
+source=($_dlurl/glibc-$pkgver.tar.xz)
+signatures=($_dlurl/glibc-$pkgver.tar.xz.sig)

if Fuse GLIBC_PORTS; then
source=("${source[@]}" "$_dlurl/glibc-ports-$pkgver.tar.xz" \
diff --git a/source/base/glibc/glibc-2.14-revert-4768ae77.patch 
b/source/base/glibc/glibc-2.14-revert-4768ae77.patch
deleted file mode 100644
index 74db4ec..0000000
--- a/source/base/glibc/glibc-2.14-revert-4768ae77.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -Naur glibc-orig//resolv/res_send.c glibc/resolv/res_send.c
---- glibc-orig//resolv/res_send.c      2011-06-10 18:59:03.041436996 +1000
-+++ glibc/resolv/res_send.c    2011-06-10 19:08:09.379309323 +1000
-@@ -549,7 +549,7 @@
-                                   ns, ansp, ansp2, nansp2, resplen2);
-                       if (n < 0)
-                               return (-1);
--                      if (n == 0 && (buf2 == NULL || *resplen2 == 0))
-+                      if (n == 0)
-                               goto next_ns;
-               } else {
-                       /* Use datagrams. */
-@@ -559,7 +559,7 @@
-                                   ansp2, nansp2, resplen2);
-                       if (n < 0)
-                               return (-1);
--                      if (n == 0 && (buf2 == NULL || *resplen2 == 0))
-+                      if (n == 0)
-                               goto next_ns;
-                       if (v_circuit)
-                         // XXX Check whether both requests failed or
-@@ -1275,14 +1275,10 @@
-                               (*thisresplenp > *thisanssizp)
-                               ? *thisanssizp : *thisresplenp);
-
--                      if (recvresp1 || (buf2 != NULL && recvresp2)) {
--                        *resplen2 = 0;
-+                      if (recvresp1 || (buf2 != NULL && recvresp2))
-                         return resplen;
--                      }
-                       if (buf2 != NULL)
-                         {
--                          /* No data from the first reply.  */
--                          resplen = 0;
-                           /* We are waiting for a possible second reply.  */
-                           if (hp->id == anhp->id)
-                             recvresp1 = 1;
diff --git a/source/base/glibc/glibc-2.15-lddebug-scopes.patch 
b/source/base/glibc/glibc-2.15-lddebug-scopes.patch
deleted file mode 100644
index e3ed497..0000000
--- a/source/base/glibc/glibc-2.15-lddebug-scopes.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 0c95ab64cb4ec0d22bb222647d9d20c7b4903e38 Mon Sep 17 00:00:00 2001
-From: Andreas Schwab <[email protected]>
-Date: Fri, 7 Oct 2011 09:31:27 +0200
-Subject: [PATCH] Horrible workaround for horribly broken software
-
----
- elf/rtld.c |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 978c609..8422b9f 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -1393,7 +1393,9 @@ of this helper program; chances are you did not intend 
to run this program.\n\
-             char *copy = malloc (len);
-             if (copy == NULL)
-               _dl_fatal_printf ("out of memory\n");
--            l->l_libname->name = l->l_name = memcpy (copy, dsoname, len);
-+            l->l_libname->name = memcpy (copy, dsoname, len);
-+            if (GLRO(dl_debug_mask))
-+              l->l_name = copy;
-           }
-
-         /* Add the vDSO to the object list.  */
---
-1.7.3.4
diff --git a/source/base/glibc/glibc-2.15-revert-c5a0802a.patch 
b/source/base/glibc/glibc-2.15-revert-c5a0802a.patch
deleted file mode 100644
index ad4413a..0000000
--- a/source/base/glibc/glibc-2.15-revert-c5a0802a.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-diff -rup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 
b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
---- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S       
2011-12-22 18:04:12.937212834 +0000
-+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S       
2011-12-22 18:04:42.104222278 +0000
-@@ -137,7 +137,6 @@ __pthread_cond_wait:
-       cmpl    $PI_BIT, %eax
-       jne     18f
-
--90:
-       movl    $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
-       movl    %ebp, %edx
-       xorl    %esi, %esi
-@@ -151,9 +150,6 @@ __pthread_cond_wait:
-       sete    16(%esp)
-       je      19f
-
--      cmpl    $-EAGAIN, %eax
--      je      91f
--
-       /* Normal and PI futexes dont mix. Use normal futex functions only
-          if the kernel does not support the PI futex functions.  */
-       cmpl    $-ENOSYS, %eax
-@@ -398,78 +394,6 @@ __pthread_cond_wait:
- #endif
-       call    __lll_unlock_wake
-       jmp     11b
--
--91:
--.LcleanupSTART2:
--      /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN.  We need to
--         call it again.  */
--
--      /* Get internal lock.  */
--      movl    $1, %edx
--      xorl    %eax, %eax
--      LOCK
--#if cond_lock == 0
--      cmpxchgl %edx, (%ebx)
--#else
--      cmpxchgl %edx, cond_lock(%ebx)
--#endif
--      jz      92f
--
--#if cond_lock == 0
--      movl    %ebx, %edx
--#else
--      leal    cond_lock(%ebx), %edx
--#endif
--#if (LLL_SHARED-LLL_PRIVATE) > 255
--      xorl    %ecx, %ecx
--#endif
--      cmpl    $-1, dep_mutex(%ebx)
--      setne   %cl
--      subl    $1, %ecx
--      andl    $(LLL_SHARED-LLL_PRIVATE), %ecx
--#if LLL_PRIVATE != 0
--      addl    $LLL_PRIVATE, %ecx
--#endif
--      call    __lll_lock_wait
--
--92:
--      /* Increment the cond_futex value again, so it can be used as a new
--         expected value. */
--      addl    $1, cond_futex(%ebx)
--      movl    cond_futex(%ebx), %ebp
--
--      /* Unlock.  */
--      LOCK
--#if cond_lock == 0
--      subl    $1, (%ebx)
--#else
--      subl    $1, cond_lock(%ebx)
--#endif
--      je      93f
--#if cond_lock == 0
--      movl    %ebx, %eax
--#else
--      leal    cond_lock(%ebx), %eax
--#endif
--#if (LLL_SHARED-LLL_PRIVATE) > 255
--      xorl    %ecx, %ecx
--#endif
--      cmpl    $-1, dep_mutex(%ebx)
--      setne   %cl
--      subl    $1, %ecx
--      andl    $(LLL_SHARED-LLL_PRIVATE), %ecx
--#if LLL_PRIVATE != 0
--      addl    $LLL_PRIVATE, %ecx
--#endif
--      call    __lll_unlock_wake
--
--93:
--      /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
--      xorl    %ecx, %ecx
--      movl    dep_mutex(%ebx), %edi
--      jmp     90b
--.LcleanupEND2:
--
-       .size   __pthread_cond_wait, .-__pthread_cond_wait
- versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
-                 GLIBC_2_3_2)
-@@ -642,10 +566,6 @@ __condvar_w_cleanup:
-       .long   .LcleanupEND-.Lsub_cond_futex
-       .long   __condvar_w_cleanup-.LSTARTCODE
-       .uleb128  0
--      .long   .LcleanupSTART2-.LSTARTCODE
--      .long   .LcleanupEND2-.LcleanupSTART2
--      .long   __condvar_w_cleanup-.LSTARTCODE
--      .uleb128  0
-       .long   .LcallUR-.LSTARTCODE
-       .long   .LENDCODE-.LcallUR
-       .long   0
-Only in b/nptl/sysdeps/unix/sysv/linux/i386/i486: pthread_cond_wait.S.orig
-diff -rup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 
b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
---- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S  2011-12-22 
18:04:12.941212837 +0000
-+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S  2011-12-22 
18:05:05.155229737 +0000
-@@ -23,7 +23,6 @@
- #include <lowlevelcond.h>
- #include <tcb-offsets.h>
- #include <pthread-pi-defines.h>
--#include <pthread-errnos.h>
- #include <stap-probe.h>
-
- #include <kernel-features.h>
-@@ -137,14 +136,11 @@ __pthread_cond_wait:
-       cmpl    $PI_BIT, %eax
-       jne     61f
-
--90:
-       movl    $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi
-       movl    $SYS_futex, %eax
-       syscall
-
-       movl    $1, %r8d
--      cmpq    $-EAGAIN, %rax
--      je      91f
- #ifdef __ASSUME_REQUEUE_PI
-       jmp     62f
- #else
-@@ -331,70 +327,6 @@ __pthread_cond_wait:
-
- 13:   movq    %r10, %rax
-       jmp     14b
--
--91:
--.LcleanupSTART2:
--      /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN.  We need to
--         call it again.  */
--      movq    8(%rsp), %rdi
--
--      /* Get internal lock.  */
--      movl    $1, %esi
--      xorl    %eax, %eax
--      LOCK
--#if cond_lock == 0
--      cmpxchgl %esi, (%rdi)
--#else
--      cmpxchgl %esi, cond_lock(%rdi)
--#endif
--      jz      92f
--
--#if cond_lock != 0
--      addq    $cond_lock, %rdi
--#endif
--      LP_OP(cmp) $-1, dep_mutex-cond_lock(%rdi)
--      movl    $LLL_PRIVATE, %eax
--      movl    $LLL_SHARED, %esi
--      cmovne  %eax, %esi
--      callq   __lll_lock_wait
--#if cond_lock != 0
--      subq    $cond_lock, %rdi
--#endif
--92:
--      /* Increment the cond_futex value again, so it can be used as a new
--         expected value. */
--      incl    cond_futex(%rdi)
--      movl    cond_futex(%rdi), %edx
--
--      /* Release internal lock.  */
--      LOCK
--#if cond_lock == 0
--      decl    (%rdi)
--#else
--      decl    cond_lock(%rdi)
--#endif
--      jz      93f
--
--#if cond_lock != 0
--      addq    $cond_lock, %rdi
--#endif
--      LP_OP(cmp) $-1, dep_mutex-cond_lock(%rdi)
--      movl    $LLL_PRIVATE, %eax
--      movl    $LLL_SHARED, %esi
--      cmovne  %eax, %esi
--      /* The call preserves %rdx.  */
--      callq   __lll_unlock_wake
--#if cond_lock != 0
--      subq    $cond_lock, %rdi
--#endif
--93:
--      /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
--      xorq    %r10, %r10
--      mov     dep_mutex(%rdi), %R8_LP
--      leaq    cond_futex(%rdi), %rdi
--      jmp     90b
--.LcleanupEND2:
--
-       .size   __pthread_cond_wait, .-__pthread_cond_wait
- versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
-                 GLIBC_2_3_2)
-@@ -547,15 +479,11 @@ __condvar_cleanup1:
-       .uleb128 .LcleanupSTART-.LSTARTCODE
-       .uleb128 .LcleanupEND-.LcleanupSTART
-       .uleb128 __condvar_cleanup1-.LSTARTCODE
--      .uleb128 0
--      .uleb128 .LcleanupSTART2-.LSTARTCODE
--      .uleb128 .LcleanupEND2-.LcleanupSTART2
--      .uleb128 __condvar_cleanup1-.LSTARTCODE
--      .uleb128 0
-+      .uleb128  0
-       .uleb128 .LcallUR-.LSTARTCODE
-       .uleb128 .LENDCODE-.LcallUR
-       .uleb128 0
--      .uleb128 0
-+      .uleb128  0
- .Lcstend:
-
diff --git a/source/base/glibc/glibc-2.16-strncasecmp-segfault.patch 
b/source/base/glibc/glibc-2.16-strncasecmp-segfault.patch
deleted file mode 100644
index baf3630..0000000
--- a/source/base/glibc/glibc-2.16-strncasecmp-segfault.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-diff --git a/string/test-strncasecmp.c b/string/test-strncasecmp.c
-index 6c17530..acfe668 100644
---- a/string/test-strncasecmp.c
-+++ b/string/test-strncasecmp.c
-@@ -1,5 +1,5 @@
- /* Test and measure strncasecmp functions.
--   Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc.
-+   Copyright (C) 1999-2012 Free Software Foundation, Inc.
-    This file is part of the GNU C Library.
-    Written by Jakub Jelinek <[email protected]>, 1999.
-
-@@ -251,9 +251,9 @@ do_random_tests (void)
-     }
- }
-
--
-+/* Regression test for BZ #12205 */
- static void
--check1 (void)
-+bz12205 (void)
- {
-   static char cp [4096+16] __attribute__ ((aligned(4096)));
-   static char gotrel[4096] __attribute__ ((aligned(4096)));
-@@ -270,6 +270,15 @@ check1 (void)
-     check_result (impl, s1, s2, n, exp_result);
- }
-
-+/* Regression test for BZ #14195 */
-+static void
-+bz14195 (void)
-+{
-+  const char *empty_string  = "";
-+  FOR_EACH_IMPL (impl, 0)
-+    check_result (impl, empty_string, "", 5, 0);
-+}
-+
- int
- test_main (void)
- {
-@@ -277,7 +286,8 @@ test_main (void)
-
-   test_init ();
-
--  check1 ();
-+  bz12205 ();
-+  bz14195 ();
-
-   printf ("%23s", "");
-   FOR_EACH_IMPL (impl, 0)
-diff --git a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S 
b/sysdeps/i386/i686/multiarch/strcmp-ssse3.S
-index 5e6321e..9735ad0 100644
---- a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S
-+++ b/sysdeps/i386/i686/multiarch/strcmp-ssse3.S
-@@ -2445,7 +2445,7 @@ L(less16bytes_sncmp):
- # endif
-       jne     L(neq_sncmp)
-       test    %cl, %cl
--      je      L(eq)
-+      je      L(eq_sncmp)
-
-       cmp     $1, REM
-       je      L(eq_sncmp)
---
-1.7.3.4
diff --git a/source/base/glibc/glibc-2.16-strtod-overflow.patch 
b/source/base/glibc/glibc-2.16-strtod-overflow.patch
deleted file mode 100644
index 90c94af..0000000
--- a/source/base/glibc/glibc-2.16-strtod-overflow.patch
+++ /dev/null
@@ -1,388 +0,0 @@
-diff --git a/stdlib/Makefile b/stdlib/Makefile
-index f7811c5..79c9acb 100644
---- a/stdlib/Makefile
-+++ b/stdlib/Makefile
-@@ -68,7 +68,8 @@ tests                := tst-strtol tst-strtod testmb 
testrand testsort testdiv   \
-                  tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
-                  tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2       \
-                  tst-makecontext2 tst-strtod6 tst-unsetenv1               \
--                 tst-makecontext3 bug-getcontext bug-fmtmsg1
-+                 tst-makecontext3 bug-getcontext bug-fmtmsg1              \
-+                 tst-strtod-overflow
-
- include ../Makeconfig
-
-diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
-index 2166a08..a8a7ea8 100644
---- a/stdlib/strtod_l.c
-+++ b/stdlib/strtod_l.c
-@@ -60,6 +60,7 @@ extern unsigned long long int ____strtoull_l_internal (const 
char *, char **,
- #include <math.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <stdint.h>
-
- /* The gmp headers need some configuration frobs.  */
- #define HAVE_ALLOCA 1
-@@ -72,7 +73,6 @@ extern unsigned long long int ____strtoull_l_internal (const 
char *, char **,
- #include "longlong.h"
- #include "fpioconst.h"
-
--#define NDEBUG 1
- #include <assert.h>
-
-
-@@ -174,19 +174,19 @@ extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 
1];
- /* Return a floating point number of the needed type according to the given
-    multi-precision number after possible rounding.  */
- static FLOAT
--round_and_return (mp_limb_t *retval, int exponent, int negative,
-+round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
-                 mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
- {
-   if (exponent < MIN_EXP - 1)
-     {
--      mp_size_t shift = MIN_EXP - 1 - exponent;
--
--      if (shift > MANT_DIG)
-+      if (exponent < MIN_EXP - 1 - MANT_DIG)
-       {
-         __set_errno (ERANGE);
-         return 0.0;
-       }
-
-+      mp_size_t shift = MIN_EXP - 1 - exponent;
-+
-       more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
-       if (shift == MANT_DIG)
-       /* This is a special case to handle the very seldom case where
-@@ -233,6 +233,9 @@ round_and_return (mp_limb_t *retval, int exponent, int 
negative,
-       __set_errno (ERANGE);
-     }
-
-+  if (exponent > MAX_EXP)
-+    goto overflow;
-+
-   if ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
-       && (more_bits || (retval[0] & 1) != 0
-         || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
-@@ -258,6 +261,7 @@ round_and_return (mp_limb_t *retval, int exponent, int 
negative,
-     }
-
-   if (exponent > MAX_EXP)
-+  overflow:
-     return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
-
-   return MPN2FLOAT (retval, exponent, negative);
-@@ -271,7 +275,7 @@ round_and_return (mp_limb_t *retval, int exponent, int 
negative,
-    factor for the resulting number (see code) multiply by it.  */
- static const STRING_TYPE *
- str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t 
*nsize,
--          int *exponent
-+          intmax_t *exponent
- #ifndef USE_WIDE_CHAR
-           , const char *decimal, size_t decimal_len, const char *thousands
- #endif
-@@ -301,6 +305,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t 
*n, mp_size_t *nsize,
-             cy += __mpn_add_1 (n, n, *nsize, low);
-             if (cy != 0)
-               {
-+                assert (*nsize < MPNSIZE);
-                 n[*nsize] = cy;
-                 ++(*nsize);
-               }
-@@ -335,7 +340,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t 
*n, mp_size_t *nsize,
-     }
-   while (--digcnt > 0);
-
--  if (*exponent > 0 && cnt + *exponent <= MAX_DIG_PER_LIMB)
-+  if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt)
-     {
-       low *= _tens_in_limb[*exponent];
-       start = _tens_in_limb[cnt + *exponent];
-@@ -355,7 +360,10 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t 
*n, mp_size_t *nsize,
-       cy = __mpn_mul_1 (n, n, *nsize, start);
-       cy += __mpn_add_1 (n, n, *nsize, low);
-       if (cy != 0)
--      n[(*nsize)++] = cy;
-+      {
-+        assert (*nsize < MPNSIZE);
-+        n[(*nsize)++] = cy;
-+      }
-     }
-
-   return str;
-@@ -413,7 +421,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
- {
-   int negative;                       /* The sign of the number.  */
-   MPN_VAR (num);              /* MP representation of the number.  */
--  int exponent;                       /* Exponent of the number.  */
-+  intmax_t exponent;          /* Exponent of the number.  */
-
-   /* Numbers starting `0X' or `0x' have to be processed with base 16.  */
-   int base = 10;
-@@ -435,7 +443,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-   /* Points at the character following the integer and fractional digits.  */
-   const STRING_TYPE *expp;
-   /* Total number of digit and number of digits in integer part.  */
--  int dig_no, int_no, lead_zero;
-+  size_t dig_no, int_no, lead_zero;
-   /* Contains the last character read.  */
-   CHAR_TYPE c;
-
-@@ -767,7 +775,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-      are all or any is really a fractional digit will be decided
-      later.  */
-   int_no = dig_no;
--  lead_zero = int_no == 0 ? -1 : 0;
-+  lead_zero = int_no == 0 ? (size_t) -1 : 0;
-
-   /* Read the fractional digits.  A special case are the 'american
-      style' numbers like `16.' i.e. with decimal point but without
-@@ -789,12 +797,13 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-            (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
-                              lo >= L_('a') && lo <= L_('f'); })))
-       {
--        if (c != L_('0') && lead_zero == -1)
-+        if (c != L_('0') && lead_zero == (size_t) -1)
-           lead_zero = dig_no - int_no;
-         ++dig_no;
-         c = *++cp;
-       }
-     }
-+  assert (dig_no <= (uintmax_t) INTMAX_MAX);
-
-   /* Remember start of exponent (if any).  */
-   expp = cp;
-@@ -817,24 +826,80 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-
-       if (c >= L_('0') && c <= L_('9'))
-       {
--        int exp_limit;
-+        intmax_t exp_limit;
-
-         /* Get the exponent limit. */
-         if (base == 16)
--          exp_limit = (exp_negative ?
--                       -MIN_EXP + MANT_DIG + 4 * int_no :
--                       MAX_EXP - 4 * int_no + 4 * lead_zero + 3);
-+          {
-+            if (exp_negative)
-+              {
-+                assert (int_no <= (uintmax_t) (INTMAX_MAX
-+                                               + MIN_EXP - MANT_DIG) / 4);
-+                exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no;
-+              }
-+            else
-+              {
-+                if (int_no)
-+                  {
-+                    assert (lead_zero == 0
-+                            && int_no <= (uintmax_t) INTMAX_MAX / 4);
-+                    exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3;
-+                  }
-+                else if (lead_zero == (size_t) -1)
-+                  {
-+                    /* The number is zero and this limit is
-+                       arbitrary.  */
-+                    exp_limit = MAX_EXP + 3;
-+                  }
-+                else
-+                  {
-+                    assert (lead_zero
-+                            <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4);
-+                    exp_limit = (MAX_EXP
-+                                 + 4 * (intmax_t) lead_zero
-+                                 + 3);
-+                  }
-+              }
-+          }
-         else
--          exp_limit = (exp_negative ?
--                       -MIN_10_EXP + MANT_DIG + int_no :
--                       MAX_10_EXP - int_no + lead_zero + 1);
-+          {
-+            if (exp_negative)
-+              {
-+                assert (int_no
-+                        <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG));
-+                exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no;
-+              }
-+            else
-+              {
-+                if (int_no)
-+                  {
-+                    assert (lead_zero == 0
-+                            && int_no <= (uintmax_t) INTMAX_MAX);
-+                    exp_limit = MAX_10_EXP - (intmax_t) int_no + 1;
-+                  }
-+                else if (lead_zero == (size_t) -1)
-+                  {
-+                    /* The number is zero and this limit is
-+                       arbitrary.  */
-+                    exp_limit = MAX_10_EXP + 1;
-+                  }
-+                else
-+                  {
-+                    assert (lead_zero
-+                            <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1));
-+                    exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1;
-+                  }
-+              }
-+          }
-+
-+        if (exp_limit < 0)
-+          exp_limit = 0;
-
-         do
-           {
--            exponent *= 10;
--            exponent += c - L_('0');
--
--            if (__builtin_expect (exponent > exp_limit, 0))
-+            if (__builtin_expect ((exponent > exp_limit / 10
-+                                   || (exponent == exp_limit / 10
-+                                       && c - L_('0') > exp_limit % 10)), 0))
-               /* The exponent is too large/small to represent a valid
-                  number.  */
-               {
-@@ -843,7 +908,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-                 /* We have to take care for special situation: a joker
-                    might have written "0.0e100000" which is in fact
-                    zero.  */
--                if (lead_zero == -1)
-+                if (lead_zero == (size_t) -1)
-                   result = negative ? -0.0 : 0.0;
-                 else
-                   {
-@@ -862,6 +927,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-                 /* NOTREACHED */
-               }
-
-+            exponent *= 10;
-+            exponent += c - L_('0');
-+
-             c = *++cp;
-           }
-         while (c >= L_('0') && c <= L_('9'));
-@@ -930,7 +998,14 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-       }
- #endif
-       startp += lead_zero + decimal_len;
--      exponent -= base == 16 ? 4 * lead_zero : lead_zero;
-+      assert (lead_zero <= (base == 16
-+                          ? (uintmax_t) INTMAX_MAX / 4
-+                          : (uintmax_t) INTMAX_MAX));
-+      assert (lead_zero <= (base == 16
-+                          ? ((uintmax_t) exponent
-+                             - (uintmax_t) INTMAX_MIN) / 4
-+                          : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN)));
-+      exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) 
lead_zero;
-       dig_no -= lead_zero;
-     }
-
-@@ -972,7 +1047,10 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-       }
-
-       /* Adjust the exponent for the bits we are shifting in.  */
--      exponent += bits - 1 + (int_no - 1) * 4;
-+      assert (int_no <= (uintmax_t) (exponent < 0
-+                                   ? (INTMAX_MAX - bits + 1) / 4
-+                                   : (INTMAX_MAX - exponent - bits + 1) / 4));
-+      exponent += bits - 1 + ((intmax_t) int_no - 1) * 4;
-
-       while (--dig_no > 0 && idx >= 0)
-       {
-@@ -1024,13 +1102,15 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-      really integer digits or belong to the fractional part; i.e. we normalize
-      123e-2 to 1.23.  */
-   {
--    register int incr = (exponent < 0 ? MAX (-int_no, exponent)
--                       : MIN (dig_no - int_no, exponent));
-+    register intmax_t incr = (exponent < 0
-+                            ? MAX (-(intmax_t) int_no, exponent)
-+                            : MIN ((intmax_t) dig_no - (intmax_t) int_no,
-+                                   exponent));
-     int_no += incr;
-     exponent -= incr;
-   }
-
--  if (__builtin_expect (int_no + exponent > MAX_10_EXP + 1, 0))
-+  if (__builtin_expect (exponent > MAX_10_EXP + 1 - (intmax_t) int_no, 0))
-     {
-       __set_errno (ERANGE);
-       return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
-@@ -1215,7 +1295,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-        digits we should have enough bits for the result.  The remaining
-        decimal digits give us the information that more bits are following.
-        This can be used while rounding.  (Two added as a safety margin.)  */
--    if (dig_no - int_no > (MANT_DIG - bits + 2) / 3 + 2)
-+    if ((intmax_t) dig_no > (intmax_t) int_no + (MANT_DIG - bits + 2) / 3 + 2)
-       {
-       dig_no = int_no + (MANT_DIG - bits + 2) / 3 + 2;
-       more_bits = 1;
-@@ -1223,7 +1303,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
-     else
-       more_bits = 0;
-
--    neg_exp = dig_no - int_no - exponent;
-+    neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent;
-
-     /* Construct the denominator.  */
-     densize = 0;
-diff --git a/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c
-new file mode 100644
-index 0000000..668d55b
---- /dev/null
-+++ b/stdlib/tst-strtod-overflow.c
-@@ -0,0 +1,48 @@
-+/* Test for integer/buffer overflow in strtod.
-+   Copyright (C) 2012 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#define EXPONENT "e-2147483649"
-+#define SIZE 214748364
-+
-+static int
-+do_test (void)
-+{
-+  char *p = malloc (1 + SIZE + sizeof (EXPONENT));
-+  if (p == NULL)
-+    {
-+      puts ("malloc failed, cannot test for overflow");
-+      return 0;
-+    }
-+  p[0] = '1';
-+  memset (p + 1, '0', SIZE);
-+  memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
-+  double d = strtod (p, NULL);
-+  if (d != 0)
-+    {
-+      printf ("strtod returned wrong value: %a\n", d);
-+      return 1;
-+    }
-+  return 0;
-+}
-+
-+#define TEST_FUNCTION do_test ()
-+#include "../test-skeleton.c"
---
-1.7.3.4
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to