Commit 22c0e5db authored by Sebastian Dröge's avatar Sebastian Dröge 🍵
Browse files

Merge branch 'backport-1791-datetime-nan-glib-2-66' into 'glib-2-66'

Backport !1791 “gdatetime: Disallow NAN as a number of seconds in a GDateTime” to glib-2-66

See merge request !1793
parents 120b659b 83e5b9ca
Pipeline #237517 failed with stages
in 7 minutes and 29 seconds
......@@ -52,6 +52,7 @@
#define _GNU_SOURCE 1
#endif
#include <math.h>
#include <stdlib.h>
#include <string.h>
......@@ -1213,7 +1214,11 @@ get_iso8601_seconds (const gchar *text, gsize length, gdouble *value)
divisor *= 10;
}
*value = v / divisor;
v = v / divisor;
if (!isfinite (v))
return FALSE;
*value = v;
return TRUE;
}
......@@ -1585,6 +1590,7 @@ g_date_time_new (GTimeZone *tz,
day < 1 || day > days_in_months[GREGORIAN_LEAP (year)][month] ||
hour < 0 || hour > 23 ||
minute < 0 || minute > 59 ||
!isfinite (seconds) ||
seconds < 0.0 || seconds >= 60.0)
return NULL;
......
......@@ -18,6 +18,7 @@
#include "config.h"
#include <math.h>
#include <string.h>
#include <time.h>
#include <gi18n.h>
......@@ -797,6 +798,12 @@ test_GDateTime_new_from_iso8601 (void)
/* Timezone hours two digits */
dt = g_date_time_new_from_iso8601 ("2016-08-24T22-2Z", NULL);
g_assert_null (dt);
/* Ordinal date (YYYYDDD), space separator, and then time as HHMMSS,SSS
* The interesting bit is that the seconds field is so long as to parse as
* NaN */
dt = g_date_time_new_from_iso8601 ("0005306 000001,666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666600080000-00", NULL);
g_assert_null (dt);
}
typedef struct {
......@@ -1270,6 +1277,8 @@ test_GDateTime_new_full (void)
g_date_time_unref (dt);
dt = g_date_time_new_utc (2016, 12, 32, 22, 10, 42);
g_assert_null (dt);
dt = g_date_time_new_utc (2020, 12, 9, 14, 49, NAN);
g_assert_null (dt);
}
static void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment