[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#693784: marked as done (unblock: eglibc/2.13-37)



Your message dated Thu, 22 Nov 2012 20:35:01 +0000
with message-id <1353616501.9073.9.camel@jacala.jungle.funky-badger.org>
and subject line Re: Bug#693784: unblock: eglibc/2.13-37
has caused the Debian Bug report #693784,
regarding unblock: eglibc/2.13-37
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
693784: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=693784
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear release team,

eglibc version 2.13-37 which is currently in unstable fixes 3 RC bugs:
one security issue, one IPv6 issue on kFreeBSD causing d-i to fail in
some cases, and an atomic issue that can affect ARM and SPARC.

It also fixes POSIX compliance for the C.UTF-8 locale, the postinst 
script for locales-all, documentation and packages description. It also
fixes a potential build issue when using a kernel with a two level
version.

Finally it also contains some Hurd important fixes, but all the
corresponding changes are in Hurd specific files.

You'll find the corresponding diff below. Would it be possible to allow
this package to migrate to wheezy?

  unblock eglibc/2.13-37

Thanks,
Aurelien


diff -u eglibc-2.13/debian/changelog eglibc-2.13/debian/changelog
--- eglibc-2.13/debian/changelog
+++ eglibc-2.13/debian/changelog
@@ -1,3 +1,48 @@
+eglibc (2.13-37) unstable; urgency=low
+
+  [ Aurelien Jarno ]
+  * debhelper.in/locales.postinst: correctly lookup for the locales-all
+    package.  Closes: #692777.
+  * patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff: update to 
+    fix uninitialised bytes access in getaddrinfo().  Closes: #692433.
+  * patches/localedata/locale-C.diff: update to fix strftime('%X') return
+    a 24-hour time format.  Closes: #693446.
+
+  [ Jonathan Nieder ]
+  * control.in/opt: remove outdated reference to 2.6 kernel from
+    description of i686 variant.  Thanks to Regid Ichira.  Closes:
+    #692154.
+
+  [ Samuel Thibault ]
+  * patches/hurd-i386/tg-tls-support.diff: Re-fix port leak in fork(). The
+    change was lost while synchronizing with the topgit repository.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Sun, 18 Nov 2012 22:53:04 +0100
+
+eglibc (2.13-36) unstable; urgency=low
+
+  [ Aurelien Jarno ]
+  * patches/any/cvs-strtod-overflow.diff: new patch from upstream to fix
+    an integer/buffer overflow in strtod() (CVE-2012-3480).  Closes: 
+    #684889.
+  * patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff: new patch to
+    fix getaddrinfo() when service = 0 on a FreeBSD kernel with DNS
+    server returning IPv6, but without IPv6 connection.  Closes: #690021.
+  * sysdeps/linux.mk: fix kernel version parsing with only two numbers.
+  * patches/any/cvs-arch-lowlevellock.diff: new patch from upstream to
+    fix futexes atomic issue on ARM and SPARC.  Closes: #691173.
+  * local/manpages/ldconfig.8: fix wrong description of ld.so.conf format.
+    Closes: #684682.
+
+  [ Samuel Thibault ]
+  * libc0.3.symbols.hurd-i386: Add missing *_exec_file_name symbols.
+  * patches/hurd-i386/unsubmitted-gnumach.defs.diff: New patch to build stubs
+    for new gnumach.defs.
+  * libc0.3.symbols.hurd-i386: Add new gnumach.defs stubs symbols.
+  * control: build-depend on gnumach-dev that provides gnumach.defs.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Fri, 26 Oct 2012 14:28:06 +0000
+
 eglibc (2.13-35) unstable; urgency=low
 
   [ Aurelien Jarno ]
diff -u eglibc-2.13/debian/control eglibc-2.13/debian/control
--- eglibc-2.13/debian/control
+++ eglibc-2.13/debian/control
@@ -4,7 +4,7 @@
 Build-Depends: gettext, make (>= 3.80), dpkg-dev (>= 1.16.0), bzip2, xz-utils, file, quilt,
  autoconf, sed (>= 4.0.5-4), gawk, debhelper (>= 7.4.3), tar (>= 1.22), fdupes,
  linux-libc-dev (>= 3.2.1) [linux-any],
- mig (>= 1.3-2) [hurd-i386], hurd-dev (>= 20120520-2~) [hurd-i386], gnumach-dev [hurd-i386],
+ mig (>= 1.3-2) [hurd-i386], hurd-dev (>= 20120520-2~) [hurd-i386], gnumach-dev (>= 2:1.3.99.dfsg.git20120923~) [hurd-i386],
  kfreebsd-kernel-headers [kfreebsd-any],
  binutils (>= 2.20-3), binutils (>= 2.21) [sparc sparc64],
  g++-4.4 (>= 4.4.2-2) [!armhf], g++-4.6 [armhf], g++-4.4-multilib [amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc]
@@ -746,10 +746,10 @@
  library and the standard math library, as well as many others.
  .
  This set of libraries is optimized for i686 machines, and will only be
- used if you are running a 2.6 kernel on an i686 class CPU (check the 
- output of `uname -m').  This includes Pentium Pro, Pentium II/III/IV, 
- Celeron CPU's and similar class CPU's (including clones such as AMD 
- Athlon/Opteron, VIA C3 Nehemiah, but not VIA C3 Ezra).  
+ used on an i686 class CPU (check the output of `uname -m').  This includes 
+ Pentium Pro, Pentium II/III/IV, Celeron CPU's and similar class CPU's
+ (including clones such as AMD Athlon/Opteron, VIA C3 Nehemiah, but not VIA 
+ C3 Ezla).  
 
 Package: libc6-xen
 Architecture: i386
diff -u eglibc-2.13/debian/libc0.3.symbols.hurd-i386 eglibc-2.13/debian/libc0.3.symbols.hurd-i386
--- eglibc-2.13/debian/libc0.3.symbols.hurd-i386
+++ eglibc-2.13/debian/libc0.3.symbols.hurd-i386
@@ -368,6 +368,7 @@
  dir_rmdir@Base 2.11
  dir_unlink@Base 2.11
  exec_exec@Base 2.11
+ exec_exec_file_name@Base 2.13-33~0
  exec_init@Base 2.11
  exec_setexecdata@Base 2.11
  exec_startup_get_info@Base 2.11
@@ -377,6 +378,7 @@
  file_chmod@Base 2.11
  file_chown@Base 2.11
  file_exec@Base 2.11
+ file_exec_file_name@Base 2.13-33~0
  file_get_fs_options@Base 2.11
  file_get_storage_info@Base 2.11
  file_get_translator@Base 2.11
@@ -775,6 +777,7 @@
  __thread_terminate@Base 2.11
  __thread_wire@Base 2.11
  __vm_allocate_rpc@Base 2.11
+ __vm_cache_statistics@Base 2.13-36
  __vm_copy@Base 2.11
  __vm_deallocate_rpc@Base 2.11
  __vm_inherit@Base 2.11
@@ -925,6 +928,7 @@
  thread_terminate@Base 2.11
  thread_wire@Base 2.11
  vm_allocate_rpc@Base 2.11
+ vm_cache_statistics@Base 2.13-36
  vm_copy@Base 2.11
  vm_deallocate_rpc@Base 2.11
  vm_inherit@Base 2.11
diff -u eglibc-2.13/debian/patches/series eglibc-2.13/debian/patches/series
--- eglibc-2.13/debian/patches/series
+++ eglibc-2.13/debian/patches/series
@@ -207,8 +207,10 @@
 hurd-i386/submitted-sendto.diff
 hurd-i386/tg-chflags.diff
 hurd-i386/submitted-exec_filename.diff
+hurd-i386/unsubmitted-gnumach.defs.diff
 
 kfreebsd/submitted-libc_once.diff
+kfreebsd/local-getaddrinfo-freebsd-kernel.diff
 
 ia64/local-dlfptr.diff
 ia64/submitted-sysconf.diff
@@ -365,0 +368,2 @@
+any/cvs-strtod-overflow.diff
+any/cvs-arch-lowlevellock.diff
diff -u eglibc-2.13/debian/patches/hurd-i386/tg-tls.diff eglibc-2.13/debian/patches/hurd-i386/tg-tls.diff
--- eglibc-2.13/debian/patches/hurd-i386/tg-tls.diff
+++ eglibc-2.13/debian/patches/hurd-i386/tg-tls.diff
@@ -216,7 +216,7 @@
  
        /* Do special thread setup for TLS if needed.  */
 -      if (err = _hurd_tls_fork (thread, &state))
-+      if (err = _hurd_tls_fork (thread, __mach_thread_self (), &state))
++      if (err = _hurd_tls_fork (thread, ss->thread, &state))
  	LOSE;
  
        if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR,
diff -u eglibc-2.13/debian/patches/localedata/locale-C.diff eglibc-2.13/debian/patches/localedata/locale-C.diff
--- eglibc-2.13/debian/patches/localedata/locale-C.diff
+++ eglibc-2.13/debian/patches/localedata/locale-C.diff
@@ -20,8 +20,8 @@
 +fax        ""
 +language   "C"
 +territory  ""
-+revision   "1.4"
-+date       "2012-04-26"
++revision   "1.5"
++date       "2012-11-18"
 +%
 +category  "C:2012";LC_IDENTIFICATION
 +category  "C:2012";LC_CTYPE
@@ -395025,8 +395025,8 @@
 +d_fmt   "<U0025><U006D><U002F><U0025><U0064><U002F><U0025><U0059>"
 +
 +% Appropriate time representation (%X)
-+%	"%r"
-+t_fmt   "<U0025><U0072>"
++%	"%T"
++t_fmt   "<U0025><U0054>"
 +
 +% Appropriate AM/PM time representation (%r)
 +%	"%I:%M:%S %p"
diff -u eglibc-2.13/debian/control.in/opt eglibc-2.13/debian/control.in/opt
--- eglibc-2.13/debian/control.in/opt
+++ eglibc-2.13/debian/control.in/opt
@@ -11,10 +11,10 @@
  library and the standard math library, as well as many others.
  .
  This set of libraries is optimized for i686 machines, and will only be
- used if you are running a 2.6 kernel on an i686 class CPU (check the 
- output of `uname -m').  This includes Pentium Pro, Pentium II/III/IV, 
- Celeron CPU's and similar class CPU's (including clones such as AMD 
- Athlon/Opteron, VIA C3 Nehemiah, but not VIA C3 Ezra).  
+ used on an i686 class CPU (check the output of `uname -m').  This includes 
+ Pentium Pro, Pentium II/III/IV, Celeron CPU's and similar class CPU's
+ (including clones such as AMD Athlon/Opteron, VIA C3 Nehemiah, but not VIA 
+ C3 Ezla).  
 
 Package: libc6-xen
 Architecture: i386
diff -u eglibc-2.13/debian/control.in/main eglibc-2.13/debian/control.in/main
--- eglibc-2.13/debian/control.in/main
+++ eglibc-2.13/debian/control.in/main
@@ -4,7 +4,7 @@
 Build-Depends: gettext, make (>= 3.80), dpkg-dev (>= 1.16.0), bzip2, xz-utils, file, quilt,
  autoconf, sed (>= 4.0.5-4), gawk, debhelper (>= 7.4.3), tar (>= 1.22), fdupes,
  linux-libc-dev (>= 3.2.1) [linux-any],
- mig (>= 1.3-2) [hurd-i386], hurd-dev (>= 20120520-2~) [hurd-i386], gnumach-dev [hurd-i386],
+ mig (>= 1.3-2) [hurd-i386], hurd-dev (>= 20120520-2~) [hurd-i386], gnumach-dev (>= 2:1.3.99.dfsg.git20120923~) [hurd-i386],
  kfreebsd-kernel-headers [kfreebsd-any],
  binutils (>= 2.20-3), binutils (>= 2.21) [sparc sparc64],
  g++-4.4 (>= 4.4.2-2) [!armhf], g++-4.6 [armhf], g++-4.4-multilib [amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc]
diff -u eglibc-2.13/debian/debhelper.in/locales.postinst eglibc-2.13/debian/debhelper.in/locales.postinst
--- eglibc-2.13/debian/debhelper.in/locales.postinst
+++ eglibc-2.13/debian/debhelper.in/locales.postinst
@@ -58,7 +58,7 @@
     fi
 
     # Update requested locales if locales-all is not installed
-    if dpkg-query -S locales-all >/dev/null 2>&1 ; then
+    if dpkg-query -s locales-all >/dev/null 2>&1 ; then
         echo "locales-all installed, skipping locales generation"
     else
         locale-gen
diff -u eglibc-2.13/debian/local/manpages/ldconfig.8 eglibc-2.13/debian/local/manpages/ldconfig.8
--- eglibc-2.13/debian/local/manpages/ldconfig.8
+++ eglibc-2.13/debian/local/manpages/ldconfig.8
@@ -140,8 +140,7 @@
 execution time linker/loader
 .TP 20
 .B /etc/ld.so.conf
-File containing a list of colon, space, tab, newline, or comma separated
-directories in which to search for libraries.
+File containing a list of newline separated directories in which to search for libraries.
 .TP 20
 .B /etc/ld.so.cache
 File containing an ordered list of libraries found in the directories
diff -u eglibc-2.13/debian/sysdeps/linux.mk eglibc-2.13/debian/sysdeps/linux.mk
--- eglibc-2.13/debian/sysdeps/linux.mk
+++ eglibc-2.13/debian/sysdeps/linux.mk
@@ -45,8 +45,8 @@
 # into an integer so it can be easily compared and then does so.
 CURRENT_KERNEL_VERSION=$(shell uname -r)
 define kernel_check
-(minimum=$$((`echo $(1) | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)); \
-current=$$((`echo $(CURRENT_KERNEL_VERSION) | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)); \
+(minimum=$$((`echo $(1) | sed 's/^\([0-9]*\.[0-9]*\)\([^.0-9]\|$$\)/\1.0\2/; s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/'`)); \
+current=$$((`echo $(CURRENT_KERNEL_VERSION) | sed 's/^\([0-9]*\.[0-9]*\)\([^.0-9]\|$$\)/\1.0\2/; s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/'`)); \
 if [ $$current -lt $$minimum ]; then \
   false; \
 fi)
only in patch2:
unchanged:
--- eglibc-2.13.orig/debian/patches/any/cvs-arch-lowlevellock.diff
+++ eglibc-2.13/debian/patches/any/cvs-arch-lowlevellock.diff
@@ -0,0 +1,16 @@
+2012-03-16  David S. Miller  <davem@davemloft.net>
+
+	[BZ #13844]
+	* sysdeps/unix/sysv/linux/libc-lowlevellock.c: Include using <..>
+	instead of "...".
+
+diff --git a/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c b/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
+index 28672a6..4883765 100644
+--- a/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
++++ b/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
+@@ -18,4 +18,4 @@
+    02111-1307 USA.  */
+ 
+ /* No difference to lowlevellock.c, except we lose a couple of functions.  */
+-#include "lowlevellock.c"
++#include <lowlevellock.c>
only in patch2:
unchanged:
--- eglibc-2.13.orig/debian/patches/any/cvs-strtod-overflow.diff
+++ eglibc-2.13/debian/patches/any/cvs-strtod-overflow.diff
@@ -0,0 +1,348 @@
+2012-08-27  Joseph Myers  <joseph@codesourcery.com>
+  
+	[BZ #14519]
+	* stdlib/strtod_l.c (round_and_return): Return -0.0 for
+	underflowing exponent in case of negative sign.
+	* stdlib/tst-strtod-round-data: Add more tests.
+	* stdlib/tst-strtod-round.c (tests): Regenerated.
+
+2012-08-27  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #14459]
+	* stdlib/strtod_l.c: Include <stdint.h>.
+	(NDEBUG): Do not define.
+	(round_and_return): Change EXPONENT parameter to type intmax_t.
+	Rearrange calculations to avoid internal overflow possibilities.
+	(str_to_mpn): Change EXPONENT parameter to type intmax_t *.
+	Rearrange calculations to avoid internal overflow possibilities.
+	Assert that number fits inside MPNSIZE limbs.
+	(____STRTOF_INTERNAL): Change EXPONENT variable to type intmax_t.
+	Change DIG_NO, INT_NO and LEAD_ZERO to type size_t.  Rearrange
+	calculations and add assertions to avoid internal overflow
+	possibilities.  Add casts to avoid signed/unsigned operations.
+
+2011-06-22  Marek Polacek  <mpolacek@redhat.com>
+
+       [BZ #9696]
+       * stdlib/strtod_l.c (round_and_return): Set ERANGE instead of EDOM.
+
+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 (EDOM);
+-	  return 0.0;
++	  __set_errno (ERANGE);
++	  return negative ? -0.0 : 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;
only in patch2:
unchanged:
--- eglibc-2.13.orig/debian/patches/hurd-i386/unsubmitted-gnumach.defs.diff
+++ eglibc-2.13/debian/patches/hurd-i386/unsubmitted-gnumach.defs.diff
@@ -0,0 +1,39 @@
+diff --git a/mach/Makefile b/mach/Makefile
+index 00de7a5..eaf0787 100644
+--- a/mach/Makefile
++++ b/mach/Makefile
+@@ -112,7 +112,7 @@ ifndef mach-shortcuts
+ # $(mach-shortcuts) will be set, and that will change how
+ # mach_interface.defs is processed: it will get the -D flags below.
+ user-interfaces := $(filter-out $(mach-interface-list:%=mach/%) \
+-				mach/mach_port mach/mach_host mach/mach4 \
++				mach/mach_port mach/mach_host mach/mach4 mach/gnumach \
+ 				device/device_request,\
+ 				$(user-interfaces))
+ endif
+diff --git a/sysdeps/mach/configure b/sysdeps/mach/configure
+index b41449e..8b1b80b 100644
+--- a/sysdeps/mach/configure
++++ b/sysdeps/mach/configure
+@@ -411,7 +411,7 @@ if test $libc_cv_mach_task_creation_time = no; then
+ fi
+ 
+ mach_interface_list=
+-for ifc in mach mach4 \
++for ifc in mach mach4 gnumach \
+ 	   clock clock_priv host_priv host_security ledger lock_set \
+ 	   processor processor_set task thread_act vm_map \
+ 	   memory_object memory_object_default default_pager \
+diff --git a/sysdeps/mach/configure.in b/sysdeps/mach/configure.in
+index 2f82c3a..101a884 100644
+--- a/sysdeps/mach/configure.in
++++ b/sysdeps/mach/configure.in
+@@ -53,7 +53,7 @@ dnl but we don't do a check for that here because in a bare
+ dnl environment the compile against those headers will fail.
+ dnl
+ mach_interface_list=
+-for ifc in mach mach4 \
++for ifc in mach mach4 gnumach \
+ 	   clock clock_priv host_priv host_security ledger lock_set \
+ 	   processor processor_set task thread_act vm_map \
+ 	   memory_object memory_object_default default_pager \
only in patch2:
unchanged:
--- eglibc-2.13.orig/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff
+++ eglibc-2.13/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff
@@ -0,0 +1,24 @@
+--- a/sysdeps/posix/getaddrinfo.c
++++ b/sysdeps/posix/getaddrinfo.c
+@@ -2267,8 +2267,20 @@
+ 		}
+ 
+ 	      socklen_t sl = sizeof (results[i].source_addr);
++#ifdef __FreeBSD_kernel__
++	      struct sockaddr_in6 sa_in6;
++	      const struct sockaddr *sa = &sa_in6; 
++	      memcpy(&sa_in6, q->ai_addr, q->ai_family == AF_INET6 ?
++		     sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in));
++	      /* The FreeBSD kernel doesn't allow connections on port 0. Use
++	         port 1 instead, as on the FreeBSD libc. */
++	      if (sa_in6.sin6_port == htons(0))
++		sa_in6.sin6_port = htons(1);
++#else
++	      const struct sockaddr *sa = q->ai_addr;
++#endif
+ 	      if (fd != -1
+-		  && __connect (fd, q->ai_addr, q->ai_addrlen) == 0
++		  && __connect (fd, sa, q->ai_addrlen) == 0
+ 		  && __getsockname (fd,
+ 				    (struct sockaddr *) &results[i].source_addr,
+ 				    &sl) == 0)

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

--- End Message ---
--- Begin Message ---
On Thu, 2012-11-22 at 21:35 +0100, Cyril Brulebois wrote:
> Adam D. Barratt <adam@adam-barratt.org.uk> (22/11/2012):
> > Fine by me, but needs a d-i ack due to the udebs.
> 
> ACK on principle, can fix any regressions before the next release if
> anything breaks.

Thanks for the quick follow-up; unblocked.

Regards,

Adam

--- End Message ---

Reply to: