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.
This commit is contained in:
Thomas Haller 2020-10-21 12:51:48 +02:00
parent dd7ce063fb
commit 6cb6888404
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -1204,8 +1204,12 @@ _nmtst_main_loop_quit_on_notify(GObject *object, GParamSpec *pspec, gpointer use
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); \
\