]> git.pld-linux.org Git - packages/glibc.git/commitdiff
- rel 13; add sr for LC_TIME; updated branch patch auto/th/glibc-2.22-13
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 24 Jan 2016 12:46:09 +0000 (13:46 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 24 Jan 2016 12:46:09 +0000 (13:46 +0100)
glibc-git.patch
glibc.spec

index 5e297dad80e0d82d7e73476dc9f17d27e18d6416..0fabbb82b0bbac4df7e557bdb6a70b5d9712ed90 100644 (file)
@@ -1,8 +1,24 @@
 diff --git a/ChangeLog b/ChangeLog
-index cb9124e..f77829e 100644
+index cb9124e..3e1d770 100644
 --- a/ChangeLog
 +++ b/ChangeLog
-@@ -1,3 +1,255 @@
+@@ -1,3 +1,271 @@
++2015-09-26  Paul Pluzhnikov  <ppluzhnikov@google.com>
++
++      [BZ #18985]
++      * time/strftime_l.c (a_wkday, f_wkday, a_month, f_month): Range check.
++      (__strftime_internal): Likewise.
++      * time/tst-strftime.c (do_bz18985): New test.
++      (do_test): Call it.
++
++2015-08-08  Paul Pluzhnikov  <ppluzhnikov@google.com>
++
++      [BZ #17905]
++      * catgets/Makefile (tst-catgets-mem): New test.
++      * catgets/catgets.c (catopen): Don't use unbounded alloca.
++      * catgets/open_catalog.c (__open_catalog): Likewise.
++      * catgets/tst-catgets.c (do_bz17905): Test unbounded alloca.
++
 +2015-12-31  Aurelien Jarno  <aurelien@aurel32.net>
 +
 +      * sysdeps/unix/sysv/linux/alpha/libc.abilist [GLIBC_2.22]: Move
@@ -259,7 +275,7 @@ index cb9124e..f77829e 100644
  
        * version.h (RELEASE): Set to "stable".
 diff --git a/NEWS b/NEWS
-index 4c31de7..e1c1e58 100644
+index 4c31de7..5a1ebdc 100644
 --- a/NEWS
 +++ b/NEWS
 @@ -5,6 +5,16 @@ See the end for copying conditions.
@@ -270,8 +286,8 @@ index 4c31de7..e1c1e58 100644
 +
 +* The following bugs are resolved with this release:
 +
-+  18589, 18743, 18778, 18781, 18787, 18796, 18870, 18887, 18921, 18928,
-+  18969, 19018, 19058, 19174, 19178.
++  17905, 18589, 18743, 18778, 18781, 18787, 18796, 18870, 18887, 18921,
++  18928, 18969, 18985, 19018, 19058, 19174, 19178.
 +
 +* The LD_POINTER_GUARD environment variable can no longer be used to
 +  disable the pointer guard feature.  It is always enabled.
@@ -288,6 +304,217 @@ index 4c31de7..e1c1e58 100644
    removed from the standard in 2001.  Also, the glibc implementation
    leaks memory.  See BZ#18681 for more details.
  \f
+diff --git a/catgets/Makefile b/catgets/Makefile
+index 4624a88..56de38b 100644
+--- a/catgets/Makefile
++++ b/catgets/Makefile
+@@ -34,6 +34,7 @@ test-srcs = test-gencat
+ ifeq ($(run-built-tests),yes)
+ tests-special += $(objpfx)de/libc.cat $(objpfx)test1.cat $(objpfx)test2.cat \
+                $(objpfx)sample.SJIS.cat $(objpfx)test-gencat.out
++tests-special += $(objpfx)tst-catgets-mem.out
+ endif
+ gencat-modules        = xmalloc
+@@ -50,9 +51,11 @@ catgets-CPPFLAGS := -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%
+ generated += de.msg test1.cat test1.h test2.cat test2.h sample.SJIS.cat \
+            test-gencat.h
++generated += tst-catgets.mtrace tst-catgets-mem.out
++
+ generated-dirs += de
+-tst-catgets-ENV = NLSPATH="$(objpfx)%l/%N.cat" LANG=de
++tst-catgets-ENV = NLSPATH="$(objpfx)%l/%N.cat" LANG=de MALLOC_TRACE=$(objpfx)tst-catgets.mtrace
+ ifeq ($(run-built-tests),yes)
+ # This test just checks whether the program produces any error or not.
+@@ -86,4 +89,8 @@ $(objpfx)test-gencat.out: test-gencat.sh $(objpfx)test-gencat \
+ $(objpfx)sample.SJIS.cat: sample.SJIS $(objpfx)gencat
+       $(built-program-cmd) -H $(objpfx)test-gencat.h < $(word 1,$^) > $@; \
+       $(evaluate-test)
++
++$(objpfx)tst-catgets-mem.out: $(objpfx)tst-catgets.out
++      $(common-objpfx)malloc/mtrace $(objpfx)tst-catgets.mtrace > $@; \
++      $(evaluate-test)
+ endif
+diff --git a/catgets/catgets.c b/catgets/catgets.c
+index cf93d56..4be452d 100644
+--- a/catgets/catgets.c
++++ b/catgets/catgets.c
+@@ -16,7 +16,6 @@
+    License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+-#include <alloca.h>
+ #include <errno.h>
+ #include <locale.h>
+ #include <nl_types.h>
+@@ -35,6 +34,7 @@ catopen (const char *cat_name, int flag)
+   __nl_catd result;
+   const char *env_var = NULL;
+   const char *nlspath = NULL;
++  char *tmp = NULL;
+   if (strchr (cat_name, '/') == NULL)
+     {
+@@ -54,7 +54,10 @@ catopen (const char *cat_name, int flag)
+       {
+         /* Append the system dependent directory.  */
+         size_t len = strlen (nlspath) + 1 + sizeof NLSPATH;
+-        char *tmp = alloca (len);
++        tmp = malloc (len);
++
++        if (__glibc_unlikely (tmp == NULL))
++          return (nl_catd) -1;
+         __stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH);
+         nlspath = tmp;
+@@ -65,16 +68,18 @@ catopen (const char *cat_name, int flag)
+   result = (__nl_catd) malloc (sizeof (*result));
+   if (result == NULL)
+-    /* We cannot get enough memory.  */
+-    return (nl_catd) -1;
+-
+-  if (__open_catalog (cat_name, nlspath, env_var, result) != 0)
++    {
++      /* We cannot get enough memory.  */
++      result = (nl_catd) -1;
++    }
++  else if (__open_catalog (cat_name, nlspath, env_var, result) != 0)
+     {
+       /* Couldn't open the file.  */
+       free ((void *) result);
+-      return (nl_catd) -1;
++      result = (nl_catd) -1;
+     }
++  free (tmp);
+   return (nl_catd) result;
+ }
+diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
+index e069416..9f4d776 100644
+--- a/catgets/open_catalog.c
++++ b/catgets/open_catalog.c
+@@ -47,6 +47,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
+   size_t tab_size;
+   const char *lastp;
+   int result = -1;
++  char *buf = NULL;
+   if (strchr (cat_name, '/') != NULL || nlspath == NULL)
+     fd = open_not_cancel_2 (cat_name, O_RDONLY);
+@@ -57,23 +58,23 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
+   if (__glibc_unlikely (bufact + (n) >= bufmax))                            \
+     {                                                                       \
+       char *old_buf = buf;                                                  \
+-      bufmax += 256 + (n);                                                  \
+-      buf = (char *) alloca (bufmax);                                       \
+-      memcpy (buf, old_buf, bufact);                                        \
++      bufmax += (bufmax < 256 + (n)) ? 256 + (n) : bufmax;                  \
++      buf = realloc (buf, bufmax);                                          \
++      if (__glibc_unlikely (buf == NULL))                                   \
++      {                                                                     \
++        free (old_buf);                                                     \
++        return -1;                                                          \
++      }                                                                     \
+     }
+       /* The RUN_NLSPATH variable contains a colon separated list of
+        descriptions where we expect to find catalogs.  We have to
+        recognize certain % substitutions and stop when we found the
+        first existing file.  */
+-      char *buf;
+       size_t bufact;
+-      size_t bufmax;
++      size_t bufmax = 0;
+       size_t len;
+-      buf = NULL;
+-      bufmax = 0;
+-
+       fd = -1;
+       while (*run_nlspath != '\0')
+       {
+@@ -188,7 +189,10 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
+   /* Avoid dealing with directories and block devices */
+   if (__builtin_expect (fd, 0) < 0)
+-    return -1;
++    {
++      free (buf);
++      return -1;
++    }
+   if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) < 0)
+     goto close_unlock_return;
+@@ -325,6 +329,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
+   /* Release the lock again.  */
+  close_unlock_return:
+   close_not_cancel_no_status (fd);
++  free (buf);
+   return result;
+ }
+diff --git a/catgets/tst-catgets.c b/catgets/tst-catgets.c
+index a0a4089..0886938 100644
+--- a/catgets/tst-catgets.c
++++ b/catgets/tst-catgets.c
+@@ -1,7 +1,10 @@
++#include <assert.h>
+ #include <mcheck.h>
+ #include <nl_types.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
++#include <sys/resource.h>
+ static const char *msgs[] =
+@@ -12,6 +15,33 @@ static const char *msgs[] =
+ };
+ #define nmsgs (sizeof (msgs) / sizeof (msgs[0]))
++
++/* Test for unbounded alloca.  */
++static int
++do_bz17905 (void)
++{
++  char *buf;
++  struct rlimit rl;
++  nl_catd result;
++
++  const int sz = 1024 * 1024;
++
++  getrlimit (RLIMIT_STACK, &rl);
++  rl.rlim_cur = sz;
++  setrlimit (RLIMIT_STACK, &rl);
++
++  buf = malloc (sz + 1);
++  memset (buf, 'A', sz);
++  buf[sz] = '\0';
++  setenv ("NLSPATH", buf, 1);
++
++  result = catopen (buf, NL_CAT_LOCALE);
++  assert (result == (nl_catd) -1);
++
++  free (buf);
++  return 0;
++}
++
+ #define ROUNDS 5
+ static int
+@@ -62,6 +92,7 @@ do_test (void)
+       }
+     }
++  result += do_bz17905 ();
+   return result;
+ }
 diff --git a/config.make.in b/config.make.in
 index a9f5696..46cd9bb 100644
 --- a/config.make.in
@@ -2162,6 +2389,124 @@ index 0000000..f8bcfeb
 +ALIAS_IMPL (_ZGVcN8vv___powf_finite, _ZGVcN8vv_powf)
 +ALIAS_IMPL (_ZGVdN8vv___powf_finite, _ZGVdN8vv_powf)
 +ALIAS_IMPL (_ZGVeN16vv___powf_finite, _ZGVeN16vv_powf)
+diff --git a/time/strftime_l.c b/time/strftime_l.c
+index b48ef34..4eb647c 100644
+--- a/time/strftime_l.c
++++ b/time/strftime_l.c
+@@ -510,13 +510,17 @@ __strftime_internal (s, maxsize, format, tp, tzset_called ut_argument
+      only a few elements.  Dereference the pointers only if the format
+      requires this.  Then it is ok to fail if the pointers are invalid.  */
+ # define a_wkday \
+-  ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))
++  ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6                            \
++                   ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday)))
+ # define f_wkday \
+-  ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))
++  ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6                            \
++                   ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday)))
+ # define a_month \
+-  ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))
++  ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11                             \
++                   ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon)))
+ # define f_month \
+-  ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))
++  ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11                             \
++                   ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon)))
+ # define ampm \
+   ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11                  \
+                                ? NLW(PM_STR) : NLW(AM_STR)))
+@@ -526,8 +530,10 @@ __strftime_internal (s, maxsize, format, tp, tzset_called ut_argument
+ # define ap_len STRLEN (ampm)
+ #else
+ # if !HAVE_STRFTIME
+-#  define f_wkday (weekday_name[tp->tm_wday])
+-#  define f_month (month_name[tp->tm_mon])
++#  define f_wkday (tp->tm_wday < 0 || tp->tm_wday > 6 \
++                 ? "?" : weekday_name[tp->tm_wday])
++#  define f_month (tp->tm_mon < 0 || tp->tm_mon > 11  \
++                 ? "?" : month_name[tp->tm_mon])
+ #  define a_wkday f_wkday
+ #  define a_month f_month
+ #  define ampm (L_("AMPM") + 2 * (tp->tm_hour > 11))
+@@ -1321,7 +1327,7 @@ __strftime_internal (s, maxsize, format, tp, tzset_called ut_argument
+                 *tzset_called = true;
+               }
+ # endif
+-            zone = tzname[tp->tm_isdst];
++            zone = tp->tm_isdst <= 1 ? tzname[tp->tm_isdst] : "?";
+           }
+ #endif
+         if (! zone)
+diff --git a/time/tst-strftime.c b/time/tst-strftime.c
+index 374fba4..af3ff72 100644
+--- a/time/tst-strftime.c
++++ b/time/tst-strftime.c
+@@ -4,6 +4,56 @@
+ #include <time.h>
++static int
++do_bz18985 (void)
++{
++  char buf[1000];
++  struct tm ttm;
++  int rc, ret = 0;
++
++  memset (&ttm, 1, sizeof (ttm));
++  ttm.tm_zone = NULL;  /* Dereferenced directly if non-NULL.  */
++  rc = strftime (buf, sizeof (buf), "%a %A %b %B %c %z %Z", &ttm);
++
++  if (rc == 66)
++    {
++      const char expected[]
++      = "? ? ? ? ? ? 16843009 16843009:16843009:16843009 16844909 +467836 ?";
++      if (0 != strcmp (buf, expected))
++      {
++        printf ("expected:\n  %s\ngot:\n  %s\n", expected, buf);
++        ret += 1;
++      }
++    }
++  else
++    {
++      printf ("expected 66, got %d\n", rc);
++      ret += 1;
++    }
++
++  /* Check negative values as well.  */
++  memset (&ttm, 0xFF, sizeof (ttm));
++  ttm.tm_zone = NULL;  /* Dereferenced directly if non-NULL.  */
++  rc = strftime (buf, sizeof (buf), "%a %A %b %B %c %z %Z", &ttm);
++
++  if (rc == 30)
++    {
++      const char expected[] = "? ? ? ? ? ? -1 -1:-1:-1 1899  ";
++      if (0 != strcmp (buf, expected))
++      {
++        printf ("expected:\n  %s\ngot:\n  %s\n", expected, buf);
++        ret += 1;
++      }
++    }
++  else
++    {
++      printf ("expected 30, got %d\n", rc);
++      ret += 1;
++    }
++
++  return ret;
++}
++
+ static struct
+ {
+   const char *fmt;
+@@ -104,7 +154,7 @@ do_test (void)
+       }
+     }
+-  return result;
++  return result + do_bz18985 ();
+ }
+ #define TEST_FUNCTION do_test ()
 diff --git a/wcsmbs/wcscoll_l.c b/wcsmbs/wcscoll_l.c
 index 6d9384a..87f240d 100644
 --- a/wcsmbs/wcscoll_l.c
index b6128dcc8ef6c15b2c32eec738a266708597e76b..cf6f11970b25ef5d5cee01e13fce895be0353019 100644 (file)
@@ -41,7 +41,7 @@ Summary(tr.UTF-8):    GNU libc
 Summary(uk.UTF-8):     GNU libc версії
 Name:          glibc
 Version:       %{core_version}
-Release:       12
+Release:       13
 Epoch:         6
 License:       LGPL v2.1+
 Group:         Libraries
@@ -1273,7 +1273,7 @@ done
 
 # LC_TIME category, used for localized date formats (at least by coreutils)
 for i in af be bg ca cs da de el en eo es et eu fi fr ga gl hr hu ia id it ja kk ko lg lt \
-       ms nb nl pl pt pt_BR ro ru rw sk sl sv tr uk vi zh_CN zh_TW; do
+       ms nb nl pl pt pt_BR ro ru rw sk sl sr sv tr uk vi zh_CN zh_TW; do
        if [ ! -d $RPM_BUILD_ROOT%{_localedir}/$i ]; then
                echo "%lang($lang) %{_localedir}/$i" >> glibc.lang
        fi
This page took 0.239491 seconds and 4 git commands to generate.