From d8a0e5f863d258ba8e3b0ff97e5c557dbf9fee03 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Fri, 11 Sep 2009 11:46:14 -0400 Subject: [PATCH] Fix leaks in test programs, update libsoup.supp --- tests/auth-test.c | 4 + tests/chunk-test.c | 15 +- tests/libsoup.supp | 376 ++++++++++++++++++++++++++++++++++++++++++++++--- tests/misc-test.c | 1 + tests/sniffing-test.c | 20 +-- tests/streaming-test.c | 2 + 6 files changed, 389 insertions(+), 29 deletions(-) diff --git a/tests/auth-test.c b/tests/auth-test.c index b090e23..f4baaf5 100644 --- a/tests/auth-test.c +++ b/tests/auth-test.c @@ -795,6 +795,10 @@ do_select_auth_test (void) "Digest, Basic", "Digest", NULL, NULL, SOUP_STATUS_OK); + + g_object_unref (basic_auth_domain); + g_object_unref (digest_auth_domain); + soup_uri_free (uri); } int diff --git a/tests/chunk-test.c b/tests/chunk-test.c index edfe739..8ce286b 100644 --- a/tests/chunk-test.c +++ b/tests/chunk-test.c @@ -253,18 +253,21 @@ do_response_test (SoupSession *session, SoupURI *base_uri) static void temp_test_wrote_chunk (SoupMessage *msg, gpointer session) { + SoupBuffer *chunk; + + chunk = soup_message_body_get_chunk (msg->request_body, 5); + /* When the bug is present, the second chunk will also be * discarded after the first is written, which will cause * the I/O to stall since soup-message-io will think it's * done, but it hasn't written Content-Length bytes yet. - * So add in another chunk to keep it going. */ - if (!soup_message_body_get_chunk (msg->request_body, - 5)) { + if (!chunk) { debug_printf (1, " Lost second chunk!\n"); errors++; soup_session_abort (session); - } + } else + soup_buffer_free (chunk); g_signal_handlers_disconnect_by_func (msg, temp_test_wrote_chunk, session); } @@ -273,7 +276,8 @@ static void do_temporary_test (SoupSession *session, SoupURI *base_uri) { SoupMessage *msg; - const char *client_md5, *server_md5; + char *client_md5; + const char *server_md5; debug_printf (1, "PUT w/ temporary buffers\n"); @@ -304,6 +308,7 @@ do_temporary_test (SoupSession *session, SoupURI *base_uri) errors++; } + g_free (client_md5); g_object_unref (msg); } diff --git a/tests/libsoup.supp b/tests/libsoup.supp index 37da38d..8316da9 100644 --- a/tests/libsoup.supp +++ b/tests/libsoup.supp @@ -152,6 +152,19 @@ fun:g_object_class_install_property } { + glib/g_object_class_install_property_8 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_object_class_install_property +} +{ glib/g_param_spec_types_init_2 Memcheck:Leak fun:* @@ -176,6 +189,16 @@ fun:g_param_spec_types_init } { + glib/g_param_spec_internal_5 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_param_spec_internal +} +{ glib/g_type_register_static_1 Memcheck:Leak fun:* @@ -377,6 +400,17 @@ fun:g_signal_new } { + glib/g_signal_handlers_destroy_6 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_signal_handlers_destroy +} +{ glib/g_get_language_names_2 Memcheck:Leak fun:* @@ -411,6 +445,31 @@ fun:g_get_language_names } { + glib/g_get_language_names_7 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_get_language_names +} +{ + glib/g_get_language_names_8 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_get_language_names +} +{ glib/g_intern_static_string_3 Memcheck:Leak fun:* @@ -483,7 +542,19 @@ fun:g_thread_init_glib } { - glib/g_thread_init_glib_y + glib/g_thread_init_glib_7 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_thread_init_glib +} +{ + glib/g_thread_init_glib_8 Memcheck:Leak fun:* fun:* @@ -492,6 +563,7 @@ fun:* fun:* fun:* + fun:* fun:g_thread_init_glib } { @@ -613,6 +685,16 @@ fun:g_data_initialize } { + glib/g_data_initialize_5 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_data_initialize +} +{ glib/g_static_rw_lock_writer_lock_3 Memcheck:Leak fun:* @@ -655,6 +737,152 @@ fun:* fun:g_child_watch_source_init_multi_threaded } +{ + glib/g_static_private_set_4 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:g_static_private_set +} +{ + glib/g_main_context_push_thread_default_4 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:g_queue_new + fun:g_main_context_push_thread_default +} +{ + glib/g_resolver_get_default_9 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_resolver_get_default +} +{ + glib/g_threaded_resolver_init_4 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:g_threaded_resolver_init +} +{ + glib/g_threaded_resolver_init_5 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_threaded_resolver_init +} +{ + glib/g_threaded_resolver_init_7 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:g_threaded_resolver_init +} +{ + glib/xdg_mime_init_4 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_3 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_2 + Memcheck:Leak + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_8 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_9 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_10 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:xdg_mime_init +} +{ + glib/xdg_mime_init_11 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:xdg_mime_init +} { @@ -749,6 +977,22 @@ fun:gnutls_global_init } { + gnutls/gnutls_global_init_11 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_global_init +} +{ gnutls/soup_gnutls_init_gcry_control_4 Memcheck:Leak fun:* @@ -759,6 +1003,17 @@ fun:soup_gnutls_init } { + gnutls/soup_gnutls_init_gcry_control_5 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gcry_control + fun:soup_gnutls_init +} +{ gnutls/soup_gnutls_init_gcry_control_7 Memcheck:Leak fun:* @@ -786,6 +1041,21 @@ fun:soup_gnutls_init } { + gnutls/soup_gnutls_init_gcry_control_9 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gcry_control + fun:soup_gnutls_init +} +{ gnutls/gnutls_handshake_5 Memcheck:Leak fun:* @@ -806,65 +1076,139 @@ fun:* fun:gnutls_handshake } - { - libsoup/intern_header_name_3 + gnutls/init_dh_params_1 + Memcheck:Leak + fun:* + fun:gnutls_dh_params_init + fun:init_dh_params +} +{ + gnutls/init_dh_params_8 Memcheck:Leak fun:* fun:* fun:* - fun:intern_header_name + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_dh_params_generate2 + fun:init_dh_params } { - libsoup/intern_header_name_4 + gnutls/init_dh_params_9 Memcheck:Leak fun:* fun:* fun:* fun:* - fun:intern_header_name + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_dh_params_generate2 + fun:init_dh_params } { - libsoup/intern_header_name_5 + gnutls/init_dh_params_10 Memcheck:Leak fun:* fun:* fun:* fun:* fun:* - fun:intern_header_name + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_dh_params_generate2 + fun:init_dh_params +} +{ + gnutls/init_dh_params_11 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_dh_params_generate2 + fun:init_dh_params +} +{ + gnutls/init_dh_params_12 + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:gnutls_dh_params_generate2 + fun:init_dh_params } + { - libsoup/soup_dns_cache_entry_new_3 + libsoup/intern_header_name_3 Memcheck:Leak fun:* fun:* fun:* - fun:soup_dns_cache_entry_new + fun:intern_header_name } { - libsoup/soup_dns_cache_entry_new_4 + libsoup/intern_header_name_4 Memcheck:Leak fun:* fun:* fun:* fun:* - fun:soup_dns_cache_entry_new + fun:intern_header_name } { - libsoup/soup_dns_lookup_name_3 + libsoup/intern_header_name_5 Memcheck:Leak fun:* fun:* fun:* - fun:soup_dns_lookup_name + fun:* + fun:* + fun:intern_header_name } { - libsoup/resolver_thread_4 + libsoup/intern_header_name_7 Memcheck:Leak fun:* fun:* fun:* fun:* - fun:resolver_thread + fun:* + fun:* + fun:* + fun:intern_header_name +} +{ + libsoup/soup_uri_get_scheme + Memcheck:Leak + fun:* + fun:* + fun:* + fun:g_ascii_strdown + fun:soup_uri_get_scheme } diff --git a/tests/misc-test.c b/tests/misc-test.c index e694477..70c213d 100644 --- a/tests/misc-test.c +++ b/tests/misc-test.c @@ -374,6 +374,7 @@ do_star_test (void) g_object_unref (msg); soup_test_session_abort_unref (session); + soup_uri_free (star_uri); } int diff --git a/tests/sniffing-test.c b/tests/sniffing-test.c index 561d2ee..26ddc16 100644 --- a/tests/sniffing-test.c +++ b/tests/sniffing-test.c @@ -166,6 +166,8 @@ server_callback (SoupServer *server, SoupMessage *msg, MIN(500, length - offset)); } soup_message_body_complete (msg->response_body); + + g_free (contents); } static gboolean @@ -271,7 +273,7 @@ do_signals_test (gboolean should_content_sniff, if (empty_response) { if (uri->query) { char *tmp = uri->query; - uri->query = g_strdup_printf("%s&empty_response=yes", tmp); + uri->query = g_strdup_printf ("%s&empty_response=yes", tmp); g_free (tmp); } else soup_uri_set_query (uri, "empty_response=yes"); @@ -317,11 +319,9 @@ do_signals_test (gboolean should_content_sniff, exit (1); } - if (!should_accumulate && chunk_data) { + if (!should_accumulate && chunk_data) body = soup_message_body_flatten (chunk_data); - soup_message_body_free (chunk_data); - chunk_data = NULL; - } else if (msg->response_body) + else if (msg->response_body) body = soup_message_body_flatten (msg->response_body); if (body && body->length != length) { @@ -334,8 +334,13 @@ do_signals_test (gboolean should_content_sniff, errors++; } + g_free (contents); if (body) soup_buffer_free (body); + if (chunk_data) { + soup_message_body_free (chunk_data); + chunk_data = NULL; + } soup_uri_free (uri); g_object_unref (msg); @@ -421,7 +426,6 @@ int main (int argc, char **argv) { SoupServer *server; - SoupContentSniffer *sniffer; test_init (argc, argv, NULL); @@ -450,8 +454,7 @@ main (int argc, char **argv) do_signals_test (FALSE, TRUE, TRUE, FALSE, TRUE); do_signals_test (FALSE, TRUE, TRUE, TRUE, TRUE); - sniffer = soup_content_sniffer_new (); - soup_session_add_feature (session, (SoupSessionFeature*)sniffer); + soup_session_add_feature_by_type (session, SOUP_TYPE_CONTENT_SNIFFER); /* Now, with a sniffer, content_sniffed must be emitted after * got-headers, and before got-chunk. @@ -519,6 +522,7 @@ main (int argc, char **argv) soup_uri_free (base_uri); + soup_test_session_abort_unref (session); test_cleanup (); return errors != 0; } diff --git a/tests/streaming-test.c b/tests/streaming-test.c index e28cfe2..1389a62 100644 --- a/tests/streaming-test.c +++ b/tests/streaming-test.c @@ -182,6 +182,8 @@ main (int argc, char **argv) g_main_loop_unref (loop); + g_free (full_response); + g_free (full_response_md5); test_cleanup (); return errors != 0; } -- 2.7.4