Skip to content
Snippets Groups Projects
Commit 1bcececd authored by rl1987's avatar rl1987 Committed by Nick Mathewson
Browse files

Fix CID 1442277

parent 41e3c760
No related branches found
No related tags found
No related merge requests found
o Minor bugfixes (unit tests):
- Instead of relying on hs_free_all() to clean up all onion service
objects we created in test_build_descriptors(), deallocate
them one by one. This lets Coverity know that we are not leaking memory
here and fixes CID 1442277. Fixes bug 28989; bugfix on 0.3.5.1-alpha.
......@@ -289,6 +289,20 @@ helper_create_service(void)
return service;
}
/* Helper: Deallocate a given service object, its child objects and
* remove it from onion service map.
* */
static void
helper_destroy_service(hs_service_t *service)
{
if (!service)
return;
remove_service(get_hs_service_map(), service);
hs_service_free(service);
}
/* Helper: Return a newly allocated service object with clients. */
static hs_service_t *
helper_create_service_with_clients(int num_clients)
......@@ -1626,6 +1640,7 @@ test_build_descriptors(void *arg)
{
int ret;
time_t now = time(NULL);
hs_service_t *last_service = NULL;
(void) arg;
......@@ -1650,6 +1665,7 @@ test_build_descriptors(void *arg)
* is disabled. */
{
hs_service_t *service = helper_create_service();
last_service = service;
service_descriptor_free(service->desc_current);
service->desc_current = NULL;
......@@ -1660,12 +1676,16 @@ test_build_descriptors(void *arg)
hs_desc_superencrypted_data_t *superencrypted;
superencrypted = &service->desc_current->desc->superencrypted_data;
tt_int_op(smartlist_len(superencrypted->clients), OP_EQ, 16);
helper_destroy_service(service);
last_service = NULL;
}
/* Generate a valid number of fake auth clients when the number of
* clients is zero. */
{
hs_service_t *service = helper_create_service_with_clients(0);
last_service = service;
service_descriptor_free(service->desc_current);
service->desc_current = NULL;
......@@ -1673,12 +1693,16 @@ test_build_descriptors(void *arg)
hs_desc_superencrypted_data_t *superencrypted;
superencrypted = &service->desc_current->desc->superencrypted_data;
tt_int_op(smartlist_len(superencrypted->clients), OP_EQ, 16);
helper_destroy_service(service);
last_service = NULL;
}
/* Generate a valid number of fake auth clients when the number of
* clients is not a multiple of 16. */
{
hs_service_t *service = helper_create_service_with_clients(20);
last_service = service;
service_descriptor_free(service->desc_current);
service->desc_current = NULL;
......@@ -1686,12 +1710,16 @@ test_build_descriptors(void *arg)
hs_desc_superencrypted_data_t *superencrypted;
superencrypted = &service->desc_current->desc->superencrypted_data;
tt_int_op(smartlist_len(superencrypted->clients), OP_EQ, 32);
helper_destroy_service(service);
last_service = NULL;
}
/* Do not generate any fake desc client when the number of clients is
* a multiple of 16 but not zero. */
{
hs_service_t *service = helper_create_service_with_clients(32);
last_service = service;
service_descriptor_free(service->desc_current);
service->desc_current = NULL;
......@@ -1699,9 +1727,13 @@ test_build_descriptors(void *arg)
hs_desc_superencrypted_data_t *superencrypted;
superencrypted = &service->desc_current->desc->superencrypted_data;
tt_int_op(smartlist_len(superencrypted->clients), OP_EQ, 32);
helper_destroy_service(service);
last_service = NULL;
}
done:
helper_destroy_service(last_service);
hs_free_all();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment