diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | localedata/ChangeLog | 3 | ||||
-rw-r--r-- | localedata/tst-strptime.c | 25 | ||||
-rw-r--r-- | stdlib/canonicalize.c | 4 |
4 files changed, 34 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index e9776fe299..0ff145cd0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-06-25 Ulrich Drepper <drepper@redhat.com> + + [BZ #6654] + * stdlib/canonicalize.c (__realpath): readlink can write too much + into the buffer on platforms without PATH_MAX. + 2008-06-17 Carlos O'Donell <carlos@codesourcery.com> [BZ #6653] diff --git a/localedata/ChangeLog b/localedata/ChangeLog index 257c58a89c..a1ffc8d50f 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,5 +1,8 @@ 2008-06-25 Ulrich Drepper <drepper@redhat.com> + * tst-strptime.c (do_test): Add test for parsing era year + representation. + [BZ #5911] * locales/es_CR: Define first_weekday and first_workday. diff --git a/localedata/tst-strptime.c b/localedata/tst-strptime.c index b5ab232d7e..a95b2c2611 100644 --- a/localedata/tst-strptime.c +++ b/localedata/tst-strptime.c @@ -1,22 +1,43 @@ #include <locale.h> #include <time.h> #include <stdio.h> +#include <string.h> static int do_test (void) { + int result = 0; + if (setlocale (LC_ALL, "vi_VN.TCVN5712-1") == NULL) { puts ("cannot set locale"); return 1; } struct tm tm; + memset (&tm, '\0', sizeof (tm)); /* This is November in Vietnamese encoded using TCVN5712-1. */ static const char s[] = "\ -\x54\x68\xb8\x6e\x67\x20\x6d\xad\xea\x69\x20\x6d\xe9\x74"; +\x54\x68\xb8\x6e\x67\x20\x6d\xad\xea\x69\x20\x6d\xe9\x74\0"; char *r = strptime (s, "%b", &tm); printf ("r = %p, r-s = %tu, tm.tm_mon = %d\n", r, r - s, tm.tm_mon); - return r == NULL || r - s != 14 || tm.tm_mon != 10; + result = r == NULL || r - s != 14 || tm.tm_mon != 10; + + if (setlocale (LC_ALL, "ja_JP.UTF-8") == NULL) + { + puts ("cannot set locale"); + return 1; + } + static const char s2[] = "\ +\x32\x35\x20\x30\x36\x20\xe5\xb9\xb3\xe6\x88\x90\x32\x30\0"; + memset (&tm, '\0', sizeof (tm)); + r = strptime (s2, "%d %m %EC%Ey", &tm); + printf ("\ +r = %p, r-s2 = %tu, tm.tm_mday = %d, tm.tm_mon = %d, tm.tm_year = %d\n", + r, r - s2, tm.tm_mday, tm.tm_mon, tm.tm_year); + result = (r == NULL || r - s2 != 14 || tm.tm_mday != 25 || tm.tm_mon != 5 + || tm.tm_year != 108); + + return result; } #define TEST_FUNCTION do_test () diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index 19808b50d6..67e4d05535 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -1,5 +1,5 @@ /* Return the canonical absolute name of a given file. - Copyright (C) 1996-2002, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1996-2002,2004,2005,2006,2008 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 @@ -173,7 +173,7 @@ __realpath (const char *name, char *resolved) goto error; } - n = __readlink (rpath, buf, path_max); + n = __readlink (rpath, buf, path_max - 1); if (n < 0) goto error; buf[n] = '\0'; |