mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 05:03:43 +01:00
Merge branch 'bug28989_squashed'
This commit is contained in:
commit
cef910642e
5
changes/bug28989
Normal file
5
changes/bug28989
Normal file
@ -0,0 +1,5 @@
|
||||
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.
|
@ -267,7 +267,7 @@ helper_clone_authorized_client(const hs_service_authorized_client_t *client)
|
||||
|
||||
/* Helper: Return a newly allocated service object with the identity keypair
|
||||
* sets and the current descriptor. Then register it to the global map.
|
||||
* Caller should us hs_free_all() to free this service or remove it from the
|
||||
* Caller should use hs_free_all() to free this service or remove it from the
|
||||
* global map before freeing. */
|
||||
static hs_service_t *
|
||||
helper_create_service(void)
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user