From a979c0d5a2124cbfe5114c5e3f1e7eefc0e230fd Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 19 Dec 2007 17:28:38 +0000 Subject: [PATCH] Fix the date validation check. (#503029) 2007-12-19 Emmanuele Bassi * 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 | 8 ++++++++ glib/gtimer.c | 4 +++- tests/testglib.c | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9564403..520c90c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-12-19 Emmanuele Bassi + + * 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 * glib/gfileutils.[ch]: diff --git a/glib/gtimer.c b/glib/gtimer.c index 3b0b308..b625ddb 100644 --- a/glib/gtimer.c +++ b/glib/gtimer.c @@ -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); diff --git a/tests/testglib.c b/tests/testglib.c index 9838dc8..6275e73 100644 --- a/tests/testglib.c +++ b/tests/testglib.c @@ -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); -- 2.7.4