Fix the date validation check. (#503029)
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 19 Dec 2007 17:28:38 +0000 (17:28 +0000)
committerEmmanuele Bassi <ebassi@src.gnome.org>
Wed, 19 Dec 2007 17:28:38 +0000 (17:28 +0000)
2007-12-19  Emmanuele Bassi  <ebassi@gnome.org>

* glib/gtimer.c (g_time_val_from_iso8601): Fix the date validation
check. (#503029)

* tests/testglib.c (various_string_tests): Add an invalid date
for testing the above fix.

svn path=/trunk/; revision=6160

ChangeLog
glib/gtimer.c
tests/testglib.c

index 95644034e191723869e62358d7e80ca611769347..520c90c8ed63172cac3a080008b0e9836e44a10e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-12-19  Emmanuele Bassi  <ebassi@gnome.org>
+
+       * glib/gtimer.c (g_time_val_from_iso8601): Fix the date validation
+       check. (#503029)
+
+       * tests/testglib.c (various_string_tests): Add an invalid date
+       for testing the above fix.
+
 2007-12-19  Alexander Larsson  <alexl@redhat.com>
 
         * glib/gfileutils.[ch]:
index 3b0b308c9023d8c18cdbc1ce2f60421a3d753e54..b625ddb54ea895d0ba1c94ea0a2d144878cd61ea 100644 (file)
@@ -312,9 +312,11 @@ g_time_val_from_iso8601 (const gchar *iso_date,
    * have an ISO 8601 date */
   while (g_ascii_isspace (*iso_date))
     iso_date++;
+
   if (*iso_date == '\0')
     return FALSE;
-  if (!g_ascii_isdigit (*iso_date) || iso_date != '-' || *iso_date != '+')
+
+  if (!g_ascii_isdigit (*iso_date) && *iso_date != '-' && *iso_date != '+')
     return FALSE;
 
   val = strtoul (iso_date, (char **)&iso_date, 10);
index 9838dc8633fedbe889c68ac921dcccae9711fa13..6275e733c5e6178ed48795949b54f5243313f487 100644 (file)
@@ -1382,6 +1382,7 @@ various_string_tests (void)
   g_free (tmp_string);
   g_free (string);
 
+#define REF_INVALID  "Wed Dec 19 17:20:20 GMT 2007"
 #define REF_SEC_UTC  320063760
 #define REF_STR_UTC  "1980-02-22T10:36:00Z"
 #define REF_STR_CEST "1980-02-22T12:36:00+02:00"
@@ -1391,6 +1392,7 @@ various_string_tests (void)
     g_print ("checking g_time_val_from_iso8601...\n");
   ref_date.tv_sec = REF_SEC_UTC;
   ref_date.tv_usec = 0;
+  g_assert (g_time_val_from_iso8601 (REF_INVALID, &date) == FALSE);
   g_assert (g_time_val_from_iso8601 (REF_STR_UTC, &date) != FALSE);
   if (g_test_verbose())
     g_print ("\t=> UTC stamp = %ld (should be: %ld) (%ld off)\n", date.tv_sec, ref_date.tv_sec, date.tv_sec - ref_date.tv_sec);