summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-10-21 12:51:48 +0200
committerThomas Haller <thaller@redhat.com>2020-10-23 17:11:54 +0200
commit6cb688840461c0093337e66184bcd1a5106a8c3f (patch)
tree30ba5595a031d867b70cd322731814fc86d82e98
parentdd7ce063fb46e1a8e17e5faf70c7cda70924e1e9 (diff)
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.
-rw-r--r--shared/nm-utils/nm-test-utils.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/shared/nm-utils/nm-test-utils.h b/shared/nm-utils/nm-test-utils.h
index 431397f0b..6c945b192 100644
--- a/shared/nm-utils/nm-test-utils.h
+++ b/shared/nm-utils/nm-test-utils.h
@@ -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); \
\