[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34453 - gnunet/src/set
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34453 - gnunet/src/set |
Date: |
Sun, 30 Nov 2014 01:44:57 +0100 |
Author: grothoff
Date: 2014-11-30 01:44:56 +0100 (Sun, 30 Nov 2014)
New Revision: 34453
Modified:
gnunet/src/set/gnunet-service-set.c
gnunet/src/set/gnunet-service-set_intersection.c
gnunet/src/set/set_api.c
gnunet/src/set/test_set_intersection_result_full.c
Log:
-avoid use after free during set intersection completion
Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2014-11-30 00:21:56 UTC (rev 34452)
+++ gnunet/src/set/gnunet-service-set.c 2014-11-30 00:44:56 UTC (rev 34453)
@@ -1458,7 +1458,8 @@
* @param cfg configuration to use
*/
static void
-run (void *cls, struct GNUNET_SERVER_Handle *server,
+run (void *cls,
+ struct GNUNET_SERVER_Handle *server,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
static const struct GNUNET_SERVER_MessageHandler server_handlers[] = {
Modified: gnunet/src/set/gnunet-service-set_intersection.c
===================================================================
--- gnunet/src/set/gnunet-service-set_intersection.c 2014-11-30 00:21:56 UTC
(rev 34452)
+++ gnunet/src/set/gnunet-service-set_intersection.c 2014-11-30 00:44:56 UTC
(rev 34453)
@@ -549,13 +549,15 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Sending done and destroy because iterator ran out\n");
+ op->keep = GNUNET_NO;
send_client_done_and_destroy (op);
return;
}
ee = nxt;
element = &ee->element;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Sending element (size %u) to client (full set)\n",
+ "Sending element %s:%u to client (full set)\n",
+ GNUNET_h2s (&ee->element_hash),
element->size);
GNUNET_assert (0 != op->spec->client_request_id);
ev = GNUNET_MQ_msg_extra (rm,
@@ -901,9 +903,11 @@
if (GNUNET_SET_RESULT_FULL == op->spec->result_mode)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Sending full result set\n");
+ "Sending full result set (%u elements)\n",
+ GNUNET_CONTAINER_multihashmap_size (op->state->my_elements));
op->state->full_result_iter
= GNUNET_CONTAINER_multihashmap_iterator_create (op->state->my_elements);
+ op->keep = GNUNET_YES;
send_remaining_elements (op);
return;
}
@@ -993,7 +997,8 @@
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Got final DONE\n");
+ "Got IntersectionDoneMessage, have %u elements in
intersection\n",
+ op->state->my_element_count);
op->state->phase = PHASE_FINISHED;
finish_and_destroy (op);
}
Modified: gnunet/src/set/set_api.c
===================================================================
--- gnunet/src/set/set_api.c 2014-11-30 00:21:56 UTC (rev 34452)
+++ gnunet/src/set/set_api.c 2014-11-30 00:44:56 UTC (rev 34453)
@@ -306,6 +306,10 @@
msg = (const struct GNUNET_SET_ResultMessage *) mh;
GNUNET_assert (NULL != set->mq);
result_status = ntohs (msg->result_status);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Got result message with status %d\n",
+ result_status);
+
oh = GNUNET_MQ_assoc_get (set->mq,
ntohl (msg->request_id));
if (NULL == oh)
@@ -331,6 +335,19 @@
oh->result_cb (oh->result_cls,
NULL,
result_status);
+ switch (result_status)
+ {
+ case GNUNET_SET_STATUS_OK:
+ break;
+ case GNUNET_SET_STATUS_FAILURE:
+ oh->result_cb = NULL;
+ break;
+ case GNUNET_SET_STATUS_HALF_DONE:
+ break;
+ case GNUNET_SET_STATUS_DONE:
+ oh->result_cb = NULL;
+ break;
+ }
GNUNET_free (oh);
return;
}
@@ -417,7 +434,8 @@
struct GNUNET_SET_Handle *set = cls;
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Handling client set error\n");
+ "Handling client set error %d\n",
+ error);
while (NULL != set->ops_head)
{
if (NULL != set->ops_head->result_cb)
@@ -479,7 +497,8 @@
}
set->mq = GNUNET_MQ_queue_for_connection_client (set->client,
mq_handlers,
- &handle_client_set_error,
set);
+ &handle_client_set_error,
+ set);
GNUNET_assert (NULL != set->mq);
mqm = GNUNET_MQ_msg (msg,
GNUNET_MESSAGE_TYPE_SET_CREATE);
Modified: gnunet/src/set/test_set_intersection_result_full.c
===================================================================
--- gnunet/src/set/test_set_intersection_result_full.c 2014-11-30 00:21:56 UTC
(rev 34452)
+++ gnunet/src/set/test_set_intersection_result_full.c 2014-11-30 00:44:56 UTC
(rev 34453)
@@ -53,6 +53,7 @@
enum GNUNET_SET_Status status)
{
static int count;
+
switch (status)
{
case GNUNET_SET_STATUS_OK:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34453 - gnunet/src/set,
gnunet <=