aboutsummaryrefslogtreecommitdiff
path: root/src/dht
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2014-10-05 12:13:09 +0000
committerChristian Grothoff <christian@grothoff.org>2014-10-05 12:13:09 +0000
commit7a05042e7e4982725669f0d12846052e2ceb1701 (patch)
treeb2c6d05fd1fe7ca6e4022397bf7d02e25fa43a25 /src/dht
parent0d24b3403ac13a75e42407c0c0f9af69a95f87f2 (diff)
downloadgnunet-7a05042e7e4982725669f0d12846052e2ceb1701.tar.gz
gnunet-7a05042e7e4982725669f0d12846052e2ceb1701.zip
-fix leak
Diffstat (limited to 'src/dht')
-rw-r--r--src/dht/gnunet-service-xdht_neighbours.c57
1 files changed, 28 insertions, 29 deletions
diff --git a/src/dht/gnunet-service-xdht_neighbours.c b/src/dht/gnunet-service-xdht_neighbours.c
index eee5d8f5f..52b410aff 100644
--- a/src/dht/gnunet-service-xdht_neighbours.c
+++ b/src/dht/gnunet-service-xdht_neighbours.c
@@ -4693,15 +4693,16 @@ get_trail_src_to_curr_pred (struct GNUNET_PeerIdentity source_peer,
4693 struct FingerInfo *current_predecessor; 4693 struct FingerInfo *current_predecessor;
4694 int i; 4694 int i;
4695 unsigned int j; 4695 unsigned int j;
4696 unsigned int len;
4696 4697
4697 current_predecessor = &finger_table[PREDECESSOR_FINGER_ID]; 4698 current_predecessor = &finger_table[PREDECESSOR_FINGER_ID];
4698 4699
4699 /* Check if trail_src_to_me contains current_predecessor. */ 4700 /* Check if trail_src_to_me contains current_predecessor. */
4700 for (i = 0; i < trail_src_to_me_len; i++) 4701 for (i = 0; i < trail_src_to_me_len; i++)
4701 { 4702 {
4702 if(0 != GNUNET_CRYPTO_cmp_peer_identity(&trail_src_to_me[i], 4703 if (0 != GNUNET_CRYPTO_cmp_peer_identity(&trail_src_to_me[i],
4703 &current_predecessor->finger_identity)) 4704 &current_predecessor->finger_identity))
4704 continue; 4705 continue;
4705 4706
4706 4707
4707 *trail_src_to_curr_pred_length = i; 4708 *trail_src_to_curr_pred_length = i;
@@ -4711,7 +4712,7 @@ get_trail_src_to_curr_pred (struct GNUNET_PeerIdentity source_peer,
4711 4712
4712 trail_src_to_curr_pred = GNUNET_malloc (*trail_src_to_curr_pred_length * 4713 trail_src_to_curr_pred = GNUNET_malloc (*trail_src_to_curr_pred_length *
4713 sizeof(struct GNUNET_PeerIdentity)); 4714 sizeof(struct GNUNET_PeerIdentity));
4714 for(j = 0; j < i;j++) 4715 for (j = 0; j < i; j++)
4715 trail_src_to_curr_pred[j] = trail_src_to_me[j]; 4716 trail_src_to_curr_pred[j] = trail_src_to_me[j];
4716 return trail_src_to_curr_pred; 4717 return trail_src_to_curr_pred;
4717 } 4718 }
@@ -4721,36 +4722,34 @@ get_trail_src_to_curr_pred (struct GNUNET_PeerIdentity source_peer,
4721 &trail_me_to_curr_pred_length); 4722 &trail_me_to_curr_pred_length);
4722 4723
4723 /* Check if trail contains the source_peer. */ 4724 /* Check if trail contains the source_peer. */
4724 for(i = trail_me_to_curr_pred_length - 1; i >= 0; i--) 4725 for (i = trail_me_to_curr_pred_length - 1; i >= 0; i--)
4725 { 4726 {
4726 if(0 != GNUNET_CRYPTO_cmp_peer_identity (&source_peer, 4727 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&source_peer,
4727 &trail_me_to_curr_pred[i])) 4728 &trail_me_to_curr_pred[i]))
4728 continue; 4729 continue;
4729 4730
4730 /* Source is NOT part of trail. */ 4731 /* Source is NOT part of trail. */
4731 i = i+1; 4732 i++;
4732 4733
4733 /* Source is the last element in the trail to reach to my pred. 4734 /* Source is the last element in the trail to reach to my pred.
4734 Source is direct friend of the pred. */ 4735 Source is direct friend of the pred. */
4735 if (trail_me_to_curr_pred_length == i) 4736 if (trail_me_to_curr_pred_length == i)
4736 { 4737 {
4737 *trail_src_to_curr_pred_length = 0; 4738 *trail_src_to_curr_pred_length = 0;
4738 return NULL; 4739 GNUNET_free_non_null (trail_me_to_curr_pred);
4739 } 4740 return NULL;
4740 4741 }
4741 *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - i; 4742
4742 trail_src_to_curr_pred = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)* 4743 *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - i;
4743 *trail_src_to_curr_pred_length); 4744 trail_src_to_curr_pred = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)*
4744 4745 *trail_src_to_curr_pred_length);
4745 for(j = 0; j < *trail_src_to_curr_pred_length; i++,j++) 4746
4746 { 4747 for (j = 0; j < *trail_src_to_curr_pred_length; i++,j++)
4747 trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i]; 4748 trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i];
4748 } 4749 GNUNET_free_non_null (trail_me_to_curr_pred);
4749 GNUNET_free_non_null(trail_me_to_curr_pred); 4750 return trail_src_to_curr_pred;
4750 return trail_src_to_curr_pred;
4751 } 4751 }
4752 4752
4753 unsigned int len;
4754 trail_src_to_curr_pred = check_for_duplicate_entries (trail_src_to_me, 4753 trail_src_to_curr_pred = check_for_duplicate_entries (trail_src_to_me,
4755 trail_src_to_me_len, 4754 trail_src_to_me_len,
4756 trail_me_to_curr_pred, 4755 trail_me_to_curr_pred,