platform/tests: better handling "timeout_msec" argument in nmtst_main_context_iterate_until()

nmtst_main_context_iterate_until() is a macro, and we don't want to restrict the
valid integer type (or range) of the "timeout_msec" argument.

In particular, if the user calculates a timeout with "timestamp_msec -
now_msec", the resulting "timeout_msec" might be a negative gint64.
We should handle that gracefully, and not let it be cast to a huge
unsigned int.

(cherry picked from commit 6cb6888404)
(cherry picked from commit 4d572bea7e)
(cherry picked from commit 95b74a3bde)
(cherry picked from commit 500c63db3c)
(cherry picked from commit e8a5cee1a1)
This commit is contained in:
Thomas Haller 2020-10-21 12:51:48 +02:00
parent 6237d89cf1
commit c909149c13
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -1049,8 +1049,12 @@ _nmtst_main_loop_quit_on_notify (GObject *object, GParamSpec *pspec, gpointer us
nm_auto_destroy_and_unref_gsource GSource *_source = NULL; \
GMainContext *_context = (context); \
gboolean _had_timeout = FALSE; \
typeof(timeout_msec) _timeout_msec0 = (timeout_msec); \
gint64 _timeout_msec = _timeout_msec0; \
\
_source = g_timeout_source_new (timeout_msec); \
g_assert_cmpint(_timeout_msec0, ==, _timeout_msec); \
\
_source = g_timeout_source_new (NM_CLAMP (_timeout_msec, 0, (gint64) G_MAXUINT)); \
g_source_set_callback (_source, nmtst_g_source_set_boolean_true, &_had_timeout, NULL); \
g_source_attach (_source, _context); \
\