Don't g_assert that localtime() returns non-NULL. It does return NULL at
authorTor Lillqvist <tml@novell.com>
Sat, 22 Jan 2005 22:10:45 +0000 (22:10 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Sat, 22 Jan 2005 22:10:45 +0000 (22:10 +0000)
2005-01-22  Tor Lillqvist  <tml@novell.com>

* 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
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-8
glib/gdate.c

index cab6839..14b7d01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-01-22  Tor Lillqvist  <tml@novell.com>
+
+       * 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  <mclasen@redhat.com>
 
        * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't
index cab6839..14b7d01 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-22  Tor Lillqvist  <tml@novell.com>
+
+       * 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  <mclasen@redhat.com>
 
        * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't
index cab6839..14b7d01 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-22  Tor Lillqvist  <tml@novell.com>
+
+       * 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  <mclasen@redhat.com>
 
        * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't
index cab6839..14b7d01 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-22  Tor Lillqvist  <tml@novell.com>
+
+       * 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  <mclasen@redhat.com>
 
        * glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't
index 73066a4..b29524c 100644 (file)
@@ -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