diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-02-09 01:33:57 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-02-09 01:33:57 +0000 |
commit | 00458b5bee15b31f90bca83c79f29e168f04ecc8 (patch) | |
tree | 8a74a80513dfde2c71f975ff4fa024e5abe99279 /time/tst-strptime3.c | |
parent | 784aacea3cdce36a6baef08cd504b89c1434fea9 (diff) | |
download | glibc-00458b5bee15b31f90bca83c79f29e168f04ecc8.zip glibc-00458b5bee15b31f90bca83c79f29e168f04ecc8.tar.gz glibc-00458b5bee15b31f90bca83c79f29e168f04ecc8.tar.bz2 |
[BZ #3944]
2007-02-08 Jakub Jelinek <jakub@redhat.com>
[BZ #3944]
* time/strptime_l.c (__strptime_internal): Set have_mon for
%b/%B/%h. Set have_mon and have_mday if tm_mon and tm_mday
have been computed from tm_yday and tm_year. Don't crash
in day_of_the_week or day_of_the_year if not have_mon
and tm_mon contains bogus value.
* time/Makefile (tests): Add tst-strptime3.
* time/tst-strptime3.c: New test.
Diffstat (limited to 'time/tst-strptime3.c')
-rw-r--r-- | time/tst-strptime3.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/time/tst-strptime3.c b/time/tst-strptime3.c new file mode 100644 index 0000000..9a8c648 --- /dev/null +++ b/time/tst-strptime3.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + + +int +main (void) +{ + int result = 0; + struct tm tm; + + memset (&tm, 0xaa, sizeof (tm)); + + /* Test we don't crash on uninitialized struct tm. + Some fields might contain bogus values until everything + needed is initialized, but we shouldn't crash. */ + if (strptime ("2007", "%Y", &tm) == NULL + || strptime ("12", "%d", &tm) == NULL + || strptime ("Feb", "%b", &tm) == NULL + || strptime ("13", "%M", &tm) == NULL + || strptime ("21", "%S", &tm) == NULL + || strptime ("16", "%H", &tm) == NULL) + { + puts ("strptimes failed"); + result = 1; + } + + if (tm.tm_sec != 21 || tm.tm_min != 13 || tm.tm_hour != 16 + || tm.tm_mday != 12 || tm.tm_mon != 1 || tm.tm_year != 107 + || tm.tm_wday != 1 || tm.tm_yday != 42) + { + puts ("unexpected tm content"); + result = 1; + } + + if (strptime ("8", "%d", &tm) == NULL) + { + puts ("strptime failed"); + result = 1; + } + + if (tm.tm_sec != 21 || tm.tm_min != 13 || tm.tm_hour != 16 + || tm.tm_mday != 8 || tm.tm_mon != 1 || tm.tm_year != 107 + || tm.tm_wday != 4 || tm.tm_yday != 38) + { + puts ("unexpected tm content"); + result = 1; + } + + if (result == 0) + puts ("all OK"); + + return 0; +} |