From 76d763485bdf98142b4ebff300f59ad8534d044e Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sat, 22 Jan 2005 22:10:45 +0000 Subject: [PATCH] Don't g_assert that localtime() returns non-NULL. It does return NULL at 2005-01-22 Tor Lillqvist * glib/gdate.c (g_date_set_time): Don't g_assert that localtime() returns non-NULL. It does return NULL at least on Win32 if you pass it a negative time_t, which although wrong, shouldn't cause an application to abort. Instead return 2000-01-01 as a default date. Print a warning unless G_DISABLE_CHECKS. (#164622) --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-12 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ glib/gdate.c | 18 ++++++++++++++++-- 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index cab68393..14b7d01b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-01-22 Tor Lillqvist + + * glib/gdate.c (g_date_set_time): Don't g_assert that localtime() + returns non-NULL. It does return NULL at least on Win32 if you + pass it a negative time_t, which although wrong, shouldn't cause + an application to abort. Instead return 2000-01-01 as a default + date. Print a warning unless G_DISABLE_CHECKS. (#164622) + 2005-01-20 Matthias Clasen * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index cab68393..14b7d01b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2005-01-22 Tor Lillqvist + + * glib/gdate.c (g_date_set_time): Don't g_assert that localtime() + returns non-NULL. It does return NULL at least on Win32 if you + pass it a negative time_t, which although wrong, shouldn't cause + an application to abort. Instead return 2000-01-01 as a default + date. Print a warning unless G_DISABLE_CHECKS. (#164622) + 2005-01-20 Matthias Clasen * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index cab68393..14b7d01b 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,11 @@ +2005-01-22 Tor Lillqvist + + * glib/gdate.c (g_date_set_time): Don't g_assert that localtime() + returns non-NULL. It does return NULL at least on Win32 if you + pass it a negative time_t, which although wrong, shouldn't cause + an application to abort. Instead return 2000-01-01 as a default + date. Print a warning unless G_DISABLE_CHECKS. (#164622) + 2005-01-20 Matthias Clasen * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index cab68393..14b7d01b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +2005-01-22 Tor Lillqvist + + * glib/gdate.c (g_date_set_time): Don't g_assert that localtime() + returns non-NULL. It does return NULL at least on Win32 if you + pass it a negative time_t, which although wrong, shouldn't cause + an application to abort. Instead return 2000-01-01 as a default + date. Print a warning unless G_DISABLE_CHECKS. (#164622) + 2005-01-20 Matthias Clasen * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't diff --git a/glib/gdate.c b/glib/gdate.c index 73066a48..b29524c3 100644 --- a/glib/gdate.c +++ b/glib/gdate.c @@ -884,8 +884,22 @@ g_date_set_time (GDate *d, #else { struct tm *ptm = localtime (&t); - g_assert (ptm); - memcpy ((void *) &tm, (void *) ptm, sizeof(struct tm)); + + if (ptm == NULL) + { + /* Happens at least in Microsoft's C library if you pass a + * negative time_t. Use 2000-01-01 as default date. + */ +#ifndef G_DISABLE_CHECKS + g_return_if_fail_warning (G_LOG_DOMAIN, "g_date_set_time", "ptm != NULL"); +#endif + + tm.tm_mon = 0; + tm.tm_mday = 1; + tm.tm_year = 100; + } + else + memcpy ((void *) &tm, (void *) ptm, sizeof(struct tm)); } #endif -- 2.34.1