clock: assert about timestamp overflows

Assert when converting to timeval and timespec about overflows. This can happen
on platforms with 32bits long.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=678181
This commit is contained in:
Wim Taymans 2012-06-19 14:05:21 +02:00
parent df18a3e148
commit fb874e2104

View file

@ -183,6 +183,8 @@ typedef gpointer GstClockID;
*/ */
#define GST_TIME_TO_TIMEVAL(t,tv) \ #define GST_TIME_TO_TIMEVAL(t,tv) \
G_STMT_START { \ G_STMT_START { \
g_assert ("Value of time " #t " is out of timeval's range" && \
((t) / GST_SECOND) < G_MAXLONG); \
(tv).tv_sec = (glong) (((GstClockTime) (t)) / GST_SECOND); \ (tv).tv_sec = (glong) (((GstClockTime) (t)) / GST_SECOND); \
(tv).tv_usec = (glong) ((((GstClockTime) (t)) - \ (tv).tv_usec = (glong) ((((GstClockTime) (t)) - \
((GstClockTime) (tv).tv_sec) * GST_SECOND) \ ((GstClockTime) (tv).tv_sec) * GST_SECOND) \
@ -205,6 +207,8 @@ G_STMT_START { \
*/ */
#define GST_TIME_TO_TIMESPEC(t,ts) \ #define GST_TIME_TO_TIMESPEC(t,ts) \
G_STMT_START { \ G_STMT_START { \
g_assert ("Value of time " #t " is out of timespec's range" && \
((t) / GST_SECOND) < G_MAXLONG); \
(ts).tv_sec = (glong) ((t) / GST_SECOND); \ (ts).tv_sec = (glong) ((t) / GST_SECOND); \
(ts).tv_nsec = (glong) (((t) - (ts).tv_sec * GST_SECOND) / GST_NSECOND); \ (ts).tv_nsec = (glong) (((t) - (ts).tv_sec * GST_SECOND) / GST_NSECOND); \
} G_STMT_END } G_STMT_END