From a5d8e8bde1008abbc0ed6eaa020871083a6ebbad Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Wed, 23 May 2012 11:43:06 +0000 Subject: [PATCH] - additional checks --- src/transport/plugin_transport_tcp.c | 4 ++++ src/util/server.c | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 076d5db71..8e76398ea 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c @@ -1937,6 +1937,10 @@ handle_tcp_data (void *cls, struct GNUNET_SERVER_Client *client, distance[1].value = session->ats_address_network_type; GNUNET_break (ntohl(session->ats_address_network_type) != GNUNET_ATS_NET_UNSPECIFIED); + GNUNET_assert (GNUNET_CONTAINER_multihashmap_contains_value (plugin->sessionmap, + &session->target.hashPubKey, + session)); + delay = plugin->env->receive (plugin->env->cls, &session->target, message, diff --git a/src/util/server.c b/src/util/server.c index f707d1bf3..69d64a702 100644 --- a/src/util/server.c +++ b/src/util/server.c @@ -991,11 +991,25 @@ process_incoming (void *cls, const void *buf, size_t available, const struct sockaddr *addr, socklen_t addrlen, int errCode) { struct GNUNET_SERVER_Client *client = cls; + struct GNUNET_SERVER_Client *tmp; struct GNUNET_SERVER_Handle *server = client->server; struct GNUNET_TIME_Absolute end; struct GNUNET_TIME_Absolute now; int ret; + /* Check if this client is still valid */ + for (tmp = server->clients_head; NULL != tmp; tmp = tmp->next) + { + if (tmp == client) + break; + } + + if (NULL == tmp) + { + GNUNET_break (0); + return; + } + GNUNET_assert (GNUNET_YES == client->receive_pending); client->receive_pending = GNUNET_NO; now = GNUNET_TIME_absolute_get (); @@ -1034,10 +1048,18 @@ process_incoming (void *cls, const void *buf, size_t available, ret = client->server->mst_receive (client->server->mst_cls, client->mst, client, buf, available, GNUNET_NO, GNUNET_YES); - else + else if (NULL != client->mst) + { ret = GNUNET_SERVER_mst_receive (client->mst, client, buf, available, GNUNET_NO, GNUNET_YES); + } + else + { + GNUNET_break (0); + return; + } + process_mst (client, ret); GNUNET_SERVER_client_drop (client); } -- 2.25.1