diff options
author | Schanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de> | 2017-12-20 10:05:45 +0100 |
---|---|---|
committer | Schanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de> | 2017-12-20 10:05:45 +0100 |
commit | 4b8c0ca31b0c8ef09f0a1349f06d37bf9b54fd79 (patch) | |
tree | 0106bbbd8c5ebcb80cb8ab3bf5c3f80d7343331e /src | |
parent | 9e486ede076d2139b1c655411ce9560d9baf6984 (diff) | |
parent | 311658e2bab990bbdb68607295e5a79fe082b384 (diff) | |
download | gnunet-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.c | 51 | ||||
-rw-r--r-- | src/peerinfo/gnunet-service-peerinfo.c | 6 | ||||
-rw-r--r-- | src/transport/gnunet-service-transport_ats.c | 10 | ||||
-rw-r--r-- | src/transport/gnunet-service-transport_neighbours.c | 5 |
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 | { |