aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport.c
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amat.us>2017-11-12 21:46:16 -0600
committerDavid Barksdale <amatus@amat.us>2017-11-12 22:02:18 -0600
commit16e4f0c52cf2303b02725b69ae16be494a147c56 (patch)
tree1e2039c7c4ecc741a71fb2ec0b4304ec5035ae9b /src/transport/gnunet-service-transport.c
parentd7b33a905546adb869f022cbe86beb0b0582fd4b (diff)
downloadgnunet-16e4f0c52cf2303b02725b69ae16be494a147c56.tar.gz
gnunet-16e4f0c52cf2303b02725b69ae16be494a147c56.zip
Fix memory leak and use-after-free
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r--src/transport/gnunet-service-transport.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c
index ec4d82164..6b354df98 100644
--- a/src/transport/gnunet-service-transport.c
+++ b/src/transport/gnunet-service-transport.c
@@ -541,6 +541,13 @@ client_disconnect_cb (void *cls,
541 GNUNET_CONTAINER_multipeermap_iterate (active_stccs, 541 GNUNET_CONTAINER_multipeermap_iterate (active_stccs,
542 &mark_match_down, 542 &mark_match_down,
543 tc); 543 tc);
544 for (struct AddressToStringContext *cur = a2s_head;
545 NULL != cur;
546 cur = cur->next)
547 {
548 if (cur->tc == tc)
549 cur->tc = NULL;
550 }
544 GNUNET_CONTAINER_DLL_remove (clients_head, 551 GNUNET_CONTAINER_DLL_remove (clients_head,
545 clients_tail, 552 clients_tail,
546 tc); 553 tc);
@@ -864,6 +871,8 @@ transmit_address_to_client (void *cls,
864 871
865 GNUNET_assert ( (GNUNET_OK == res) || 872 GNUNET_assert ( (GNUNET_OK == res) ||
866 (GNUNET_SYSERR == res) ); 873 (GNUNET_SYSERR == res) );
874 if (NULL == actx->tc)
875 return;
867 if (NULL == buf) 876 if (NULL == buf)
868 { 877 {
869 env = GNUNET_MQ_msg (atsm, 878 env = GNUNET_MQ_msg (atsm,
@@ -878,6 +887,7 @@ transmit_address_to_client (void *cls,
878 GNUNET_CONTAINER_DLL_remove (a2s_head, 887 GNUNET_CONTAINER_DLL_remove (a2s_head,
879 a2s_tail, 888 a2s_tail,
880 actx); 889 actx);
890 GNUNET_free (actx);
881 return; 891 return;
882 } 892 }
883 if (GNUNET_SYSERR == res) 893 if (GNUNET_SYSERR == res)