aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de>2017-12-20 10:05:45 +0100
committerSchanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de>2017-12-20 10:05:45 +0100
commit4b8c0ca31b0c8ef09f0a1349f06d37bf9b54fd79 (patch)
tree0106bbbd8c5ebcb80cb8ab3bf5c3f80d7343331e /src
parent9e486ede076d2139b1c655411ce9560d9baf6984 (diff)
parent311658e2bab990bbdb68607295e5a79fe082b384 (diff)
downloadgnunet-4b8c0ca31b0c8ef09f0a1349f06d37bf9b54fd79.tar.gz
gnunet-4b8c0ca31b0c8ef09f0a1349f06d37bf9b54fd79.zip
Merge remote-tracking branch 'origin/master' into identity_abe
Diffstat (limited to 'src')
-rw-r--r--src/cadet/gnunet-service-cadet_peer.c51
-rw-r--r--src/peerinfo/gnunet-service-peerinfo.c6
-rw-r--r--src/transport/gnunet-service-transport_ats.c10
-rw-r--r--src/transport/gnunet-service-transport_neighbours.c5
4 files changed, 46 insertions, 26 deletions
diff --git a/src/cadet/gnunet-service-cadet_peer.c b/src/cadet/gnunet-service-cadet_peer.c
index 71c7c67d0..c4e2c0ccf 100644
--- a/src/cadet/gnunet-service-cadet_peer.c
+++ b/src/cadet/gnunet-service-cadet_peer.c
@@ -532,32 +532,49 @@ GCP_set_mq (struct CadetPeer *cp,
532 GCP_2s (cp), 532 GCP_2s (cp),
533 mq); 533 mq);
534 cp->core_mq = mq; 534 cp->core_mq = mq;
535 for (struct GCP_MessageQueueManager *mqm = cp->mqm_head, *next; 535 /* Since these callbacks can remove any items from this list, we must take a
536 * snapshot and then test each one to see if it's still in the list. */
537 int count = 0;
538 for (struct GCP_MessageQueueManager *mqm = cp->mqm_head;
536 NULL != mqm; 539 NULL != mqm;
537 mqm = next) 540 mqm = mqm->next)
541 ++count;
542 struct GCP_MessageQueueManager *mqms[count];
543 int i = 0;
544 for (struct GCP_MessageQueueManager *mqm = cp->mqm_head;
545 NULL != mqm;
546 mqm = mqm->next)
547 mqms[i++] = mqm;
548 for (i = 0; i < count; ++i)
538 { 549 {
539 /* Save next pointer in case mqm gets freed by the callback */ 550 for (struct GCP_MessageQueueManager *mqm = cp->mqm_head;
540 next = mqm->next; 551 NULL != mqm;
541 if (NULL == mq) 552 mqm = mqm->next)
542 { 553 {
543 if (NULL != mqm->env) 554 if (mqms[i] != mqm)
555 continue;
556 if (NULL == mq)
544 { 557 {
545 GNUNET_MQ_discard (mqm->env); 558 if (NULL != mqm->env)
546 mqm->env = NULL; 559 {
547 mqm->cb (mqm->cb_cls, 560 GNUNET_MQ_discard (mqm->env);
548 GNUNET_SYSERR); 561 mqm->env = NULL;
562 mqm->cb (mqm->cb_cls,
563 GNUNET_SYSERR);
564 }
565 else
566 {
567 mqm->cb (mqm->cb_cls,
568 GNUNET_NO);
569 }
549 } 570 }
550 else 571 else
551 { 572 {
573 GNUNET_assert (NULL == mqm->env);
552 mqm->cb (mqm->cb_cls, 574 mqm->cb (mqm->cb_cls,
553 GNUNET_NO); 575 GNUNET_YES);
554 } 576 }
555 } 577 break;
556 else
557 {
558 GNUNET_assert (NULL == mqm->env);
559 mqm->cb (mqm->cb_cls,
560 GNUNET_YES);
561 } 578 }
562 } 579 }
563 if ( (NULL != mq) || 580 if ( (NULL != mq) ||
diff --git a/src/peerinfo/gnunet-service-peerinfo.c b/src/peerinfo/gnunet-service-peerinfo.c
index 731c24bf1..af1eb2d1d 100644
--- a/src/peerinfo/gnunet-service-peerinfo.c
+++ b/src/peerinfo/gnunet-service-peerinfo.c
@@ -987,9 +987,13 @@ discard_hosts_helper (void *cls,
987 int write_pos; 987 int write_pos;
988 unsigned int cnt; 988 unsigned int cnt;
989 char *writebuffer; 989 char *writebuffer;
990 uint64_t fsize;
990 991
992 GNUNET_DISK_file_size (fn, &fsize, GNUNET_YES, GNUNET_YES);
991 read_size = GNUNET_DISK_fn_read (fn, buffer, sizeof (buffer)); 993 read_size = GNUNET_DISK_fn_read (fn, buffer, sizeof (buffer));
992 if (read_size < (int) sizeof (struct GNUNET_MessageHeader)) 994
995 if ((read_size < (int) sizeof (struct GNUNET_MessageHeader)) ||
996 (fsize > GNUNET_MAX_MESSAGE_SIZE))
993 { 997 {
994 if (0 != UNLINK (fn)) 998 if (0 != UNLINK (fn))
995 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING | 999 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING |
diff --git a/src/transport/gnunet-service-transport_ats.c b/src/transport/gnunet-service-transport_ats.c
index c780f9a78..01e115bfc 100644
--- a/src/transport/gnunet-service-transport_ats.c
+++ b/src/transport/gnunet-service-transport_ats.c
@@ -337,14 +337,10 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address,
337 return; /* our own, ignore! */ 337 return; /* our own, ignore! */
338 ai = find_ai (address, 338 ai = find_ai (address,
339 session); 339 session);
340 if (NULL == ai) 340 if (NULL == ai || NULL == ai->ar)
341 {
342 GNUNET_assert (0);
343 return;
344 }
345 if (NULL == ai->ar)
346 { 341 {
347 /* already blocked but this might be a blacklist check callback */ 342 /* The address is already gone/blocked, this can happen during a blacklist
343 * callback. */
348 return; 344 return;
349 } 345 }
350 ai->back_off = GNUNET_TIME_STD_BACKOFF (ai->back_off); 346 ai->back_off = GNUNET_TIME_STD_BACKOFF (ai->back_off);
diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c
index 19f5fd081..ac72a667c 100644
--- a/src/transport/gnunet-service-transport_neighbours.c
+++ b/src/transport/gnunet-service-transport_neighbours.c
@@ -2433,7 +2433,10 @@ switch_address_bl_check_cont (void *cls,
2433 goto cleanup; 2433 goto cleanup;
2434 2434
2435 papi = GST_plugins_find (address->transport_name); 2435 papi = GST_plugins_find (address->transport_name);
2436 GNUNET_assert (NULL != papi); 2436 if (NULL == papi) {
2437 /* This can happen during shutdown. */
2438 goto cleanup;
2439 }
2437 2440
2438 if (GNUNET_NO == result) 2441 if (GNUNET_NO == result)
2439 { 2442 {