From: Christian Grothoff Date: Fri, 10 Mar 2017 16:38:52 +0000 (+0100) Subject: fix memory leak X-Git-Tag: gnunet-0.11.0rc0~291^2~24 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=287be62e649091b608c0d7bcf77c4c633a24b4e7;p=oweals%2Fgnunet.git fix memory leak --- diff --git a/src/nat/gnunet-nat.c b/src/nat/gnunet-nat.c index c785fe210..04bde5111 100644 --- a/src/nat/gnunet-nat.c +++ b/src/nat/gnunet-nat.c @@ -269,8 +269,10 @@ run (void *cls, global_ret = 1; return; } - local_len = 0; /* make compilers happy */ + local_len = 0; local_sa = NULL; + remote_len = 0; + remote_sa = NULL; if (NULL != local_addr) { local_len = (socklen_t) GNUNET_STRINGS_parse_socket_addr (local_addr, @@ -281,13 +283,10 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Invalid socket address `%s'\n", local_addr); - global_ret = 1; - return; + goto fail_and_shutdown; } } - remote_len = 0; - if (NULL != remote_addr) { remote_len = GNUNET_STRINGS_parse_socket_addr (remote_addr, @@ -298,8 +297,7 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Invalid socket address `%s'\n", remote_addr); - global_ret = 1; - return; + goto fail_and_shutdown; } } @@ -321,9 +319,7 @@ run (void *cls, { GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Use of `-W` only effective in combination with `-i`\n"); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } if (NULL != remote_addr) @@ -335,17 +331,13 @@ run (void *cls, { GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Require IPv4 local address to initiate connection reversal\n"); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } if (sizeof (struct sockaddr_in) != remote_len) { GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Require IPv4 reversal target address\n"); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } GNUNET_assert (AF_INET == local_sa->sa_family); GNUNET_assert (AF_INET == remote_sa->sa_family); @@ -374,17 +366,13 @@ run (void *cls, { GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Require local address to support STUN requests\n"); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } if (IPPROTO_UDP != proto) { GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "STUN only supported over UDP\n"); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } ls = GNUNET_NETWORK_socket_create (af, SOCK_DGRAM, @@ -399,17 +387,22 @@ run (void *cls, GNUNET_a2s (local_sa, local_len), STRERROR (errno)); - global_ret = 1; - GNUNET_SCHEDULER_shutdown (); - return; + goto fail_and_shutdown; } rtask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, ls, &stun_read_task, NULL); } - + GNUNET_free_non_null (remote_sa); + GNUNET_free_non_null (local_sa); test_finished (); + return; + fail_and_shutdown: + global_ret = 1; + GNUNET_SCHEDULER_shutdown (); + GNUNET_free_non_null (remote_sa); + GNUNET_free_non_null (local_sa); }