From 5beda76f6dfc4019fc640ee63a84b1495f782175 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 1 Jul 2010 11:46:31 +0000 Subject: fixing 'resolver' double free issue --- src/util/gnunet-service-resolver.c | 1 + src/util/server_tc.c | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'src') diff --git a/src/util/gnunet-service-resolver.c b/src/util/gnunet-service-resolver.c index 5739571ae..306cf9cec 100644 --- a/src/util/gnunet-service-resolver.c +++ b/src/util/gnunet-service-resolver.c @@ -168,6 +168,7 @@ get_ip_as_string (struct GNUNET_SERVER_Client *client, if (salen < sizeof (struct sockaddr)) { GNUNET_break (0); + GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); return; } now = GNUNET_TIME_absolute_get (); diff --git a/src/util/server_tc.c b/src/util/server_tc.c index 7514b0cd3..b7158dadb 100644 --- a/src/util/server_tc.c +++ b/src/util/server_tc.c @@ -82,6 +82,7 @@ transmit_response (void *cls, size_t size, void *buf) if (buf == NULL) { GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); + GNUNET_SERVER_client_drop (tc->client); GNUNET_free_non_null (tc->buf); GNUNET_free (tc); return 0; @@ -95,6 +96,7 @@ transmit_response (void *cls, size_t size, void *buf) if (tc->total == tc->off) { GNUNET_SERVER_receive_done (tc->client, GNUNET_OK); + GNUNET_SERVER_client_drop (tc->client); GNUNET_free_non_null (tc->buf); GNUNET_free (tc); } @@ -111,6 +113,7 @@ transmit_response (void *cls, size_t size, void *buf) { GNUNET_break (0); GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); + GNUNET_SERVER_client_drop (tc->client); GNUNET_free_non_null (tc->buf); GNUNET_free (tc); } @@ -133,6 +136,7 @@ GNUNET_SERVER_transmit_context_create (struct GNUNET_SERVER_Client *client) GNUNET_assert (client != NULL); tc = GNUNET_malloc (sizeof (struct GNUNET_SERVER_TransmitContext)); + GNUNET_SERVER_client_keep (client); tc->client = client; return tc; } @@ -213,6 +217,7 @@ GNUNET_SERVER_transmit_context_run (struct GNUNET_SERVER_TransmitContext *tc, { GNUNET_break (0); GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); + GNUNET_SERVER_client_drop (tc->client); GNUNET_free_non_null (tc->buf); GNUNET_free (tc); } -- cgit v1.2.3