From 087280973a36b24206dabd2d866a19967d66d211 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Tue, 8 May 2012 12:35:29 +0000 Subject: [PATCH] - fix crashes --- src/transport/plugin_transport_udp.c | 7 +++++-- src/transport/plugin_transport_udp_broadcasting.c | 8 +++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c index 905b7f995..9a99fc556 100644 --- a/src/transport/plugin_transport_udp.c +++ b/src/transport/plugin_transport_udp.c @@ -1521,17 +1521,19 @@ static void read_process_ack (struct Plugin *plugin, s->last_expected_delay = GNUNET_FRAGMENT_context_destroy (s->frag_ctx->frag); struct UDPMessageWrapper * udpw = NULL; + struct UDPMessageWrapper * tmp = NULL; if (s->addrlen == sizeof (struct sockaddr_in6)) { udpw = plugin->ipv6_queue_head; while (udpw!= NULL) { + tmp = udpw->next; if ((udpw->frag_ctx != NULL) && (udpw->frag_ctx == s->frag_ctx)) { GNUNET_CONTAINER_DLL_remove(plugin->ipv6_queue_head, plugin->ipv6_queue_tail, udpw); GNUNET_free (udpw); } - udpw = udpw->next; + udpw = tmp; } } if (s->addrlen == sizeof (struct sockaddr_in)) @@ -1539,12 +1541,13 @@ static void read_process_ack (struct Plugin *plugin, udpw = plugin->ipv4_queue_head; while (udpw!= NULL) { + tmp = udpw->next; if ((udpw->frag_ctx != NULL) && (udpw->frag_ctx == s->frag_ctx)) { GNUNET_CONTAINER_DLL_remove(plugin->ipv4_queue_head, plugin->ipv4_queue_tail, udpw); GNUNET_free (udpw); } - udpw = udpw->next; + udpw = tmp; } } diff --git a/src/transport/plugin_transport_udp_broadcasting.c b/src/transport/plugin_transport_udp_broadcasting.c index 623cde2bd..2935d8da3 100644 --- a/src/transport/plugin_transport_udp_broadcasting.c +++ b/src/transport/plugin_transport_udp_broadcasting.c @@ -175,7 +175,7 @@ udp_broadcast_receive (struct Plugin *plugin, const char * buf, ssize_t size, st { struct GNUNET_ATS_Information ats; - if (addrlen == sizeof (struct sockaddr_in)) + if ((GNUNET_YES == plugin->broadcast_ipv4) && (addrlen == sizeof (struct sockaddr_in))) { LOG (GNUNET_ERROR_TYPE_DEBUG, "Received IPv4 HELLO beacon broadcast with %i bytes from address %s\n", @@ -189,12 +189,14 @@ udp_broadcast_receive (struct Plugin *plugin, const char * buf, ssize_t size, st mc->addr.u4_port = av4->sin_port; ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) addr, addrlen); mc->ats_address_network_type = ats.value; + + GNUNET_assert (NULL != plugin->broadcast_ipv4_mst); if (GNUNET_OK != GNUNET_SERVER_mst_receive (plugin->broadcast_ipv4_mst, mc, buf, size, GNUNET_NO, GNUNET_NO)) GNUNET_free (mc); } - else if (addrlen == sizeof (struct sockaddr_in6)) + else if ((GNUNET_YES == plugin->broadcast_ipv4) && (addrlen == sizeof (struct sockaddr_in6))) { LOG (GNUNET_ERROR_TYPE_DEBUG, "Received IPv6 HELLO beacon broadcast with %i bytes from address %s\n", @@ -208,7 +210,7 @@ udp_broadcast_receive (struct Plugin *plugin, const char * buf, ssize_t size, st mc->addr.u6_port = av6->sin6_port; ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) addr, addrlen); mc->ats_address_network_type = ats.value; - + GNUNET_assert (NULL != plugin->broadcast_ipv4_mst); if (GNUNET_OK != GNUNET_SERVER_mst_receive (plugin->broadcast_ipv6_mst, mc, buf, size, GNUNET_NO, GNUNET_NO)) -- 2.25.1