diff --git a/glib/gdate.c b/glib/gdate.c index 391b142a8..0e03a6e70 100644 --- a/glib/gdate.c +++ b/glib/gdate.c @@ -1229,12 +1229,19 @@ g_date_set_parse (GDate *d, { GDateParseTokens pt; guint m = G_DATE_BAD_MONTH, day = G_DATE_BAD_DAY, y = G_DATE_BAD_YEAR; + gsize str_len; g_return_if_fail (d != NULL); /* set invalid */ g_date_clear (d, 1); + /* Anything longer than this is ridiculous and could take a while to normalize. + * This limit is chosen arbitrarily. */ + str_len = strlen (str); + if (str_len > 200) + return; + /* The input has to be valid UTF-8. */ if (!g_utf8_validate (str, -1, NULL)) return; diff --git a/glib/tests/date.c b/glib/tests/date.c index 38de1d9be..542293c4b 100644 --- a/glib/tests/date.c +++ b/glib/tests/date.c @@ -191,6 +191,10 @@ test_parse_invalid (void) { /* Incomplete UTF-8 sequence */ "\xfd", + /* Ridiculously long input */ + "12345678901234567890123456789012345678901234567890123456789012345678901234567890" + "12345678901234567890123456789012345678901234567890123456789012345678901234567890" + "12345678901234567890123456789012345678901234567890123456789012345678901234567890", }; gsize i;