summaryrefslogtreecommitdiff
path: root/time/tst-strptime3.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-02-09 01:33:57 +0000
committerUlrich Drepper <drepper@redhat.com>2007-02-09 01:33:57 +0000
commit00458b5bee15b31f90bca83c79f29e168f04ecc8 (patch)
tree8a74a80513dfde2c71f975ff4fa024e5abe99279 /time/tst-strptime3.c
parent784aacea3cdce36a6baef08cd504b89c1434fea9 (diff)
downloadglibc-00458b5bee15b31f90bca83c79f29e168f04ecc8.tar.gz
[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.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/time/tst-strptime3.c b/time/tst-strptime3.c
new file mode 100644
index 0000000000..9a8c6485e7
--- /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;
+}