diff options
author | Simon McVittie <smcv@collabora.com> | 2021-01-29 19:28:25 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2021-01-29 20:28:26 +0000 |
commit | 04f306cf738b0bdd1c9d8f4cde4591bba4cff2ef (patch) | |
tree | 91af983962c44c8923bb320e14a32fa268267164 | |
parent | 448f69e7f76c265fabbe72aa13d39bdc84d54cfc (diff) | |
download | glib-wip/smcv/address-sanitizer.tar.gz |
tests: Mark tests with AddressSanitizer-detected leakswip/smcv/address-sanitizer
Various tests have leaks where it isn't clear whether the data is
intentionally not freed, or leaked due to a bug. If we mark these
tests as TODO, we can skip them under AddressSanitizer and get the
rest to pass, giving us a baseline from which to avoid regressions.
Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r-- | gio/tests/cancellable.c | 8 | ||||
-rw-r--r-- | gio/tests/contenttype.c | 51 | ||||
-rw-r--r-- | gio/tests/gdbus-test-codegen.c | 15 | ||||
-rw-r--r-- | gio/tests/gmenumodel.c | 14 | ||||
-rw-r--r-- | gio/tests/testfilemonitor.c | 8 | ||||
-rw-r--r-- | glib/tests/mainloop.c | 5 | ||||
-rw-r--r-- | glib/tests/thread.c | 6 |
7 files changed, 104 insertions, 3 deletions
diff --git a/gio/tests/cancellable.c b/gio/tests/cancellable.c index d6b52c1ea..8e460b618 100644 --- a/gio/tests/cancellable.c +++ b/gio/tests/cancellable.c @@ -22,6 +22,8 @@ #include <gio/gio.h> +#include "glib/glib-private.h" + /* How long to wait in ms for each iteration */ #define WAIT_ITERATION (10) @@ -257,6 +259,11 @@ threaded_dispose_thread_cb (gpointer user_data) static void test_cancellable_source_threaded_dispose (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks lots of GCancellableSource objects, see glib!1905"); + (void) cancelled_cb; + (void) threaded_dispose_thread_cb; +#else ThreadedDisposeData data; GThread *thread = NULL; guint i; @@ -326,6 +333,7 @@ test_cancellable_source_threaded_dispose (void) g_cond_clear (&data.cond); g_ptr_array_unref (cancellables_pending_unref); +#endif } int diff --git a/gio/tests/contenttype.c b/gio/tests/contenttype.c index 3696e3662..5e2c91b77 100644 --- a/gio/tests/contenttype.c +++ b/gio/tests/contenttype.c @@ -1,6 +1,8 @@ #include <gio/gio.h> #include <string.h> +#include "glib/glib-private.h" + #define g_assert_content_type_equals(s1, s2) \ do { \ const char *__s1 = (s1), *__s2 = (s2); \ @@ -16,6 +18,9 @@ static void test_guess (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *res; gchar *expected; gchar *existing_directory; @@ -126,11 +131,15 @@ test_guess (void) g_assert_false (uncertain); g_free (res); g_free (expected); +#endif } static void test_unknown (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *unknown; gchar *str; @@ -140,11 +149,15 @@ test_unknown (void) g_assert_cmpstr (str, ==, "application/octet-stream"); g_free (str); g_free (unknown); +#endif } static void test_subtype (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *plain; gchar *xml; @@ -156,6 +169,7 @@ test_subtype (void) g_free (plain); g_free (xml); +#endif } static gint @@ -169,6 +183,10 @@ find_mime (gconstpointer a, gconstpointer b) static void test_list (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); + (void) find_mime; +#else GList *types; gchar *plain; gchar *xml; @@ -193,11 +211,15 @@ test_list (void) g_free (plain); g_free (xml); +#endif } static void test_executable (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *type; type = g_content_type_from_mime_type ("application/x-executable"); @@ -211,11 +233,15 @@ test_executable (void) type = g_content_type_from_mime_type ("image/png"); g_assert_false (g_content_type_can_be_executable (type)); g_free (type); +#endif } static void test_description (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *type; gchar *desc; @@ -225,11 +251,15 @@ test_description (void) g_free (desc); g_free (type); +#endif } static void test_icon (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gchar *type; GIcon *icon; @@ -266,12 +296,15 @@ test_icon (void) } g_object_unref (icon); g_free (type); +#endif } static void test_symbolic_icon (void) { -#ifndef G_OS_WIN32 +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#elif !defined(G_OS_WIN32) gchar *type; GIcon *icon; @@ -319,6 +352,9 @@ test_symbolic_icon (void) static void test_tree (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else const gchar *tests[] = { "x-content/image-dcf", "x-content/unix-software", @@ -343,11 +379,15 @@ test_tree (void) g_strfreev (types); g_object_unref (file); } +#endif } static void test_type_is_a_special_case (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else gboolean res; g_test_bug ("782311"); @@ -359,11 +399,15 @@ test_type_is_a_special_case (void) res = g_content_type_is_a ("anything", "application/octet-stream"); g_assert_true (res); #endif +#endif } static void test_guess_svg_from_data (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#else const gchar svgfilecontent[] = "<svg xmlns=\"http://www.w3.org/2000/svg\"\ xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\ <rect x=\"10\" y=\"10\" height=\"100\" width=\"100\"\n\ @@ -382,12 +426,15 @@ test_guess_svg_from_data (void) #endif g_assert_false (uncertain); g_free (res); +#endif } static void test_mime_from_content (void) { -#ifdef __APPLE__ +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks xdgmime internal data, see glib!1905"); +#elif defined(__APPLE__) gchar *mime_type; mime_type = g_content_type_get_mime_type ("com.microsoft.bmp"); g_assert_cmpstr (mime_type, ==, "image/bmp"); diff --git a/gio/tests/gdbus-test-codegen.c b/gio/tests/gdbus-test-codegen.c index 9a3ffa927..af927a0db 100644 --- a/gio/tests/gdbus-test-codegen.c +++ b/gio/tests/gdbus-test-codegen.c @@ -23,6 +23,8 @@ #include <string.h> #include <stdio.h> +#include "glib/glib-private.h" + #include "gdbus-tests.h" #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_64 @@ -1302,6 +1304,18 @@ static gpointer check_proxies_in_thread (gpointer user_data) { GMainLoop *loop = user_data; +#ifdef _GLIB_ADDRESS_SANITIZER + + /* Silence "Not available before 2.38" when using old API */ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS + g_test_incomplete ("Leaks a GWeakRef, see glib!1905"); + G_GNUC_END_IGNORE_DEPRECATIONS + + (void) check_thread_proxies; + (void) check_authorize_proxy; + (void) check_bat_proxy; + (void) check_bar_proxy; +#else GMainContext *thread_context; GMainLoop *thread_loop; GError *error; @@ -1370,6 +1384,7 @@ check_proxies_in_thread (gpointer user_data) g_main_loop_unref (thread_loop); g_main_context_unref (thread_context); +#endif /* this breaks out of the loop in main() (below) */ g_main_loop_quit (loop); diff --git a/gio/tests/gmenumodel.c b/gio/tests/gmenumodel.c index fc0fcea48..197c115c0 100644 --- a/gio/tests/gmenumodel.c +++ b/gio/tests/gmenumodel.c @@ -5,6 +5,8 @@ #include "gdbus-sessionbus.h" +#include "glib/glib-private.h" + static gboolean time_out (gpointer unused G_GNUC_UNUSED) { @@ -1012,11 +1014,17 @@ test_dbus_roundtrip (void) static void test_dbus_peer_roundtrip (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks a GCancellableSource, see glib!1905"); + (void) peer_connection_up; + (void) peer_connection_down; +#else PeerConnection peer; peer_connection_up (&peer); do_roundtrip (peer.server_connection, peer.client_connection); peer_connection_down (&peer); +#endif } static gint items_changed_count; @@ -1145,11 +1153,17 @@ test_dbus_subscriptions (void) static void test_dbus_peer_subscriptions (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks a GCancellableSource, see glib!1905"); + (void) peer_connection_up; + (void) peer_connection_down; +#else PeerConnection peer; peer_connection_up (&peer); do_subscriptions (peer.server_connection, peer.client_connection); peer_connection_down (&peer); +#endif } static gpointer diff --git a/gio/tests/testfilemonitor.c b/gio/tests/testfilemonitor.c index b74dc2b71..3fd99fc86 100644 --- a/gio/tests/testfilemonitor.c +++ b/gio/tests/testfilemonitor.c @@ -4,6 +4,8 @@ #include <stdlib.h> #include <gio/gio.h> +#include "glib/glib-private.h" + /* These tests were written for the inotify implementation. * Other implementations may require slight adjustments in * the tests, e.g. the length of timeouts @@ -954,6 +956,11 @@ static void test_file_hard_links (Fixture *fixture, gconstpointer user_data) { +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks an inotify data structure, see glib!1905"); + (void) file_hard_links_output; + (void) file_hard_links_step; +#else GError *error = NULL; TestData data; @@ -1004,6 +1011,7 @@ test_file_hard_links (Fixture *fixture, g_object_unref (data.monitor); g_object_unref (data.file); g_object_unref (data.output_stream); +#endif } int diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c index 563a951de..627e3c0e6 100644 --- a/glib/tests/mainloop.c +++ b/glib/tests/mainloop.c @@ -1645,6 +1645,10 @@ threadf (gpointer data) static void test_mainloop_wait (void) { +#ifdef _GLIB_ADDRESS_SANITIZER + (void) threadf; + g_test_incomplete ("Leaks a GMainLoop, see glib!1905"); +#else GMainContext *context; GThread *t1, *t2; @@ -1657,6 +1661,7 @@ test_mainloop_wait (void) g_thread_join (t2); g_main_context_unref (context); +#endif } #endif diff --git a/glib/tests/thread.c b/glib/tests/thread.c index 579ce1fca..c22d01c43 100644 --- a/glib/tests/thread.c +++ b/glib/tests/thread.c @@ -33,6 +33,8 @@ #include <glib.h> +#include "glib/glib-private.h" + #ifdef G_OS_UNIX #include <unistd.h> #include <sys/resource.h> @@ -132,7 +134,9 @@ test_thread3 (void) static void test_thread4 (void) { -#ifdef HAVE_PRLIMIT +#ifdef _GLIB_ADDRESS_SANITIZER + g_test_incomplete ("Leaks a GSystemThread's name, see glib!1905"); +#elif defined(HAVE_PRLIMIT) struct rlimit ol, nl; GThread *thread; GError *error; |