summaryrefslogtreecommitdiff
path: root/core/glibc
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2011-12-21 23:14:55 +0000
committerroot <root@rshg054.dnsready.net>2011-12-21 23:14:55 +0000
commit69d24275e4d5296a5f02e4c4d0fc438a80d159b8 (patch)
tree06395fd573908625990d57aa57cdacba4d92faae /core/glibc
parentea1f4bece8870857691a7123bdc899562760b3fe (diff)
Wed Dec 21 23:14:54 UTC 2011
Diffstat (limited to 'core/glibc')
-rw-r--r--core/glibc/PKGBUILD25
-rw-r--r--core/glibc/glibc-2.14.1-tzfile-overflow.patch72
2 files changed, 88 insertions, 9 deletions
diff --git a/core/glibc/PKGBUILD b/core/glibc/PKGBUILD
index 0be9ebb2f..3247503ad 100644
--- a/core/glibc/PKGBUILD
+++ b/core/glibc/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 144848 2011-12-08 12:17:04Z allan $
+# $Id: PKGBUILD 145254 2011-12-20 11:55:23Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc
@@ -6,7 +6,7 @@
pkgname=glibc
pkgver=2.14.1
-pkgrel=2
+pkgrel=4
_glibcdate=20111025
pkgdesc="GNU C Library"
arch=('i686' 'x86_64')
@@ -31,6 +31,7 @@ source=(ftp://ftp.archlinux.org/other/glibc/${pkgname}-${pkgver}_${_glibcdate}.t
glibc-2.14-revert-4768ae77.patch
glibc-2.14-reexport-rpc-interface.patch
glibc-2.14-reinstall-nis-rpc-headers.patch
+ glibc-2.14.1-tzfile-overflow.patch
nscd
locale.gen.txt
locale-gen)
@@ -45,11 +46,11 @@ md5sums=('c52a15134dfa9f2c94f2ccd4cb155cf1'
'7da8c554a3b591c7401d7023b1928afc'
'c5de2a946215d647c8af5432ec4b0da0'
'55febbb72139ac7b65757df085024b83'
+ '178779bfaa1418c709f31c25eb3d8a3e'
'b587ee3a70c9b3713099295609afde49'
'07ac979b6ab5eeb778d55f041529d623'
'476e9113489f93b348b21e144b6a8fcf')
-
mksource() {
git clone git://sourceware.org/git/glibc.git
pushd glibc
@@ -99,6 +100,10 @@ build() {
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=bdd816a3 (only fedora branch...)
patch -Np1 -i ${srcdir}/glibc-2.14-reinstall-nis-rpc-headers.patch
+ # http://sourceware.org/bugzilla/show_bug.cgi?id=13506
+ # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=97ac2654
+ patch -Np1 -i ${srcdir}/glibc-2.14.1-tzfile-overflow.patch
+
install -dm755 ${pkgdir}/etc
touch ${pkgdir}/etc/ld.so.conf
@@ -181,9 +186,12 @@ package() {
ln -v -s ../lib/ld* .
fi
- # manually strip files as stripping libpthread-*.so and libthread_db.so
- # with the default $STRIP_SHARED breaks gdb and stripping ld-*.so breaks
- # valgrind on x86_64
+ # Do not strip the following files for improved debugging support
+ # ("improved" as in not breaking gdb and valgrind...):
+ # ld-${pkgver}.so
+ # libc-${pkgver}.so
+ # libpthread-${pkgver}.so
+ # libthread_db-1.0.so
cd $pkgdir
strip $STRIP_BINARIES sbin/{ldconfig,sln} \
@@ -193,10 +201,9 @@ package() {
usr/sbin/{iconvconfig,nscd}
[[ $CARCH = "i686" ]] && strip $STRIP_BINARIES usr/bin/lddlibc4
- strip $STRIP_STATIC usr/lib/*.a \
- lib/{{ld,libpthread}-${pkgver},libthread_db-1.0}.so
+ strip $STRIP_STATIC usr/lib/*.a
- strip $STRIP_SHARED lib/{libanl,libBrokenLocale,libc,libcidn,libcrypt}-${pkgver}.so \
+ strip $STRIP_SHARED lib/{libanl,libBrokenLocale,libcidn,libcrypt}-${pkgver}.so \
lib/libnss_{compat,dns,files,hesiod,nis,nisplus}-${pkgver}.so \
lib/{libdl,libm,libnsl,libresolv,librt,libutil}-${pkgver}.so \
lib/{libmemusage,libpcprofile,libSegFault}.so \
diff --git a/core/glibc/glibc-2.14.1-tzfile-overflow.patch b/core/glibc/glibc-2.14.1-tzfile-overflow.patch
new file mode 100644
index 000000000..9e21cbfd3
--- /dev/null
+++ b/core/glibc/glibc-2.14.1-tzfile-overflow.patch
@@ -0,0 +1,72 @@
+diff --git a/time/tzfile.c b/time/tzfile.c
+index 144e20b..402389c 100644
+--- a/time/tzfile.c
++++ b/time/tzfile.c
+@@ -234,23 +234,58 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+ goto read_again;
+ }
+
++ if (__builtin_expect (num_transitions
++ > ((SIZE_MAX - (__alignof__ (struct ttinfo) - 1))
++ / (sizeof (time_t) + 1)), 0))
++ goto lose;
+ total_size = num_transitions * (sizeof (time_t) + 1);
+ total_size = ((total_size + __alignof__ (struct ttinfo) - 1)
+ & ~(__alignof__ (struct ttinfo) - 1));
+ types_idx = total_size;
+- total_size += num_types * sizeof (struct ttinfo) + chars;
++ if (__builtin_expect (num_types
++ > (SIZE_MAX - total_size) / sizeof (struct ttinfo), 0))
++ goto lose;
++ total_size += num_types * sizeof (struct ttinfo);
++ if (__builtin_expect (chars > SIZE_MAX - total_size, 0))
++ goto lose;
++ total_size += chars;
++ if (__builtin_expect (__alignof__ (struct leap) - 1
++ > SIZE_MAX - total_size, 0))
++ goto lose;
+ total_size = ((total_size + __alignof__ (struct leap) - 1)
+ & ~(__alignof__ (struct leap) - 1));
+ leaps_idx = total_size;
++ if (__builtin_expect (num_leaps
++ > (SIZE_MAX - total_size) / sizeof (struct leap), 0))
++ goto lose;
+ total_size += num_leaps * sizeof (struct leap);
+- tzspec_len = (sizeof (time_t) == 8 && trans_width == 8
+- ? st.st_size - (ftello (f)
+- + num_transitions * (8 + 1)
+- + num_types * 6
+- + chars
+- + num_leaps * 12
+- + num_isstd
+- + num_isgmt) - 1 : 0);
++ tzspec_len = 0;
++ if (sizeof (time_t) == 8 && trans_width == 8)
++ {
++ off_t rem = st.st_size - ftello (f);
++ if (__builtin_expect (rem < 0
++ || (size_t) rem < (num_transitions * (8 + 1)
++ + num_types * 6
++ + chars), 0))
++ goto lose;
++ tzspec_len = (size_t) rem - (num_transitions * (8 + 1)
++ + num_types * 6
++ + chars);
++ if (__builtin_expect (num_leaps > SIZE_MAX / 12
++ || tzspec_len < num_leaps * 12, 0))
++ goto lose;
++ tzspec_len -= num_leaps * 12;
++ if (__builtin_expect (tzspec_len < num_isstd, 0))
++ goto lose;
++ tzspec_len -= num_isstd;
++ if (__builtin_expect (tzspec_len == 0 || tzspec_len - 1 < num_isgmt, 0))
++ goto lose;
++ tzspec_len -= num_isgmt + 1;
++ if (__builtin_expect (SIZE_MAX - total_size < tzspec_len, 0))
++ goto lose;
++ }
++ if (__builtin_expect (SIZE_MAX - total_size - tzspec_len < extra, 0))
++ goto lose;
+
+ /* Allocate enough memory including the extra block requested by the
+ caller. */