Browse Source

Merge branch 'maint-0.2.9'

Nick Mathewson 7 years ago
parent
commit
f7e8bd640a
2 changed files with 12 additions and 5 deletions
  1. 4 0
      changes/bug20864
  2. 8 5
      src/test/test_hs.c

+ 4 - 0
changes/bug20864

@@ -0,0 +1,4 @@
+  o Minor bugfixes (unit tests, hidden services):
+    - Remove a double-free in the single onion service unit test. Stop
+      ignoring a return value. Make future changes less error-prone.
+      Fixes bug 20864; bugfix on 0.2.9.6-rc.

+ 8 - 5
src/test/test_hs.c

@@ -550,6 +550,7 @@ test_single_onion_poisoning(void *arg)
   rend_service_t *service_2 = tor_malloc_zero(sizeof(rend_service_t));
   char *dir2 = tor_strdup(get_fname_rnd("test_hs_dir2"));
   smartlist_t *services = smartlist_new();
+  char *poison_path = NULL;
 
   /* No services, no service to verify, no problem! */
   mock_options->HiddenServiceSingleHopMode = 0;
@@ -578,8 +579,8 @@ test_single_onion_poisoning(void *arg)
     tt_assert(ret == 0);
   }
 
-  service_1->directory = dir1;
-  service_2->directory = dir2;
+  service_1->directory = tor_strdup(dir1);
+  service_2->directory = tor_strdup(dir2);
   /* The services own the directory pointers now */
   dir1 = dir2 = NULL;
   /* Add port to service 1 */
@@ -696,6 +697,7 @@ test_single_onion_poisoning(void *arg)
 
   /* Now add the second service: it has no key and no poison file */
   ret = rend_service_check_dir_and_add(services, mock_options, service_2, 0);
+  tt_assert(ret == 0);
 
   /* A new service, and an existing poisoned service. Not ok. */
   mock_options->HiddenServiceSingleHopMode = 0;
@@ -715,9 +717,9 @@ test_single_onion_poisoning(void *arg)
 
   /* Now remove the poisoning from the first service, and we have the opposite
    * problem. */
-  char *poison_path = rend_service_sos_poison_path(service_1);
+  poison_path = rend_service_sos_poison_path(service_1);
+  tt_assert(poison_path);
   ret = unlink(poison_path);
-  tor_free(poison_path);
   tt_assert(ret == 0);
 
   /* Unpoisoned service directories with previous keys are ok, as are empty
@@ -774,9 +776,10 @@ test_single_onion_poisoning(void *arg)
   tt_assert(ret == 0);
 
  done:
+  /* The test harness deletes the directories at exit */
+  tor_free(poison_path);
   tor_free(dir1);
   tor_free(dir2);
-  /* The test harness deletes the directories at exit */
   smartlist_free(services);
   rend_service_free(service_1);
   rend_service_free(service_2);