From 6cb688840461c0093337e66184bcd1a5106a8c3f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Oct 2020 12:51:48 +0200 Subject: [PATCH] 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. --- shared/nm-utils/nm-test-utils.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/shared/nm-utils/nm-test-utils.h b/shared/nm-utils/nm-test-utils.h index 431397f0bf..6c945b1920 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); \ \