aboutsummaryrefslogtreecommitdiff
path: root/time/strptime_l.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-07-31 13:33:18 +0000
committerJakub Jelinek <jakub@redhat.com>2007-07-31 13:33:18 +0000
commit32c075e1f01849e161724bbd400ba77244e482cc (patch)
tree5f083a3f352104f32bb6c902d57fa3f294bd8d4d /time/strptime_l.c
parentd6220e9ee38c1c9285221b023346201ec5f511b3 (diff)
downloadglibc-32c075e1f01849e161724bbd400ba77244e482cc.tar
glibc-32c075e1f01849e161724bbd400ba77244e482cc.tar.gz
glibc-32c075e1f01849e161724bbd400ba77244e482cc.tar.bz2
glibc-32c075e1f01849e161724bbd400ba77244e482cc.zip
.
Diffstat (limited to 'time/strptime_l.c')
-rw-r--r--time/strptime_l.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/time/strptime_l.c b/time/strptime_l.c
index dc0cc686fd..443a6fa88e 100644
--- a/time/strptime_l.c
+++ b/time/strptime_l.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2004, 2005, 2007 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
@@ -400,6 +400,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM)
/* Does not match a month name. */
return NULL;
tm->tm_mon = cnt;
+ have_mon = 1;
want_xday = 1;
break;
case 'c':
@@ -1085,11 +1086,15 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM)
tm->tm_mday =
(tm->tm_yday
- __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1);
+ have_mon = 1;
+ have_mday = 1;
}
- day_of_the_week (tm);
+ /* Don't crash in day_of_the_week if tm_mon is uninitialized. */
+ if (have_mon || (unsigned) tm->tm_mon <= 11)
+ day_of_the_week (tm);
}
- if (want_xday && !have_yday)
+ if (want_xday && !have_yday && (have_mon || (unsigned) tm->tm_mon <= 11))
day_of_the_year (tm);
if ((have_uweek || have_wweek) && have_wday)