Browse Source

fixup! Refactor initiate_descriptor_downloads() to be safer

Calculate digest_len correctly.

Also, refactor setting of initial variables to look a little nicer.
Nick Mathewson 9 years ago
parent
commit
0fdfdae7e3
1 changed files with 9 additions and 5 deletions
  1. 9 5
      src/or/routerlist.c

+ 9 - 5
src/or/routerlist.c

@@ -4299,18 +4299,23 @@ MOCK_IMPL(STATIC void, initiate_descriptor_downloads,
            int lo, int hi, int pds_flags))
 {
   char *resource, *cp;
-  int digest_len = DIGEST_LEN, enc_digest_len = HEX_DIGEST_LEN;
-  const char *sep = "+";
-  int b64_256 = 0;
+  int digest_len, enc_digest_len;
+  const char *sep;
+  int b64_256;
   smartlist_t *tmp;
 
   if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
     /* Microdescriptors are downloaded by "-"-separated base64-encoded
      * 256-bit digests. */
     digest_len = DIGEST256_LEN;
-    enc_digest_len = BASE64_DIGEST256_LEN;
+    enc_digest_len = BASE64_DIGEST256_LEN + 1;
     sep = "-";
     b64_256 = 1;
+  } else {
+    digest_len = DIGEST_LEN;
+    enc_digest_len = HEX_DIGEST_LEN + 1;
+    sep = "+";
+    b64_256 = 0;
   }
 
   if (lo < 0)
@@ -4321,7 +4326,6 @@ MOCK_IMPL(STATIC void, initiate_descriptor_downloads,
   if (hi-lo <= 0)
     return;
 
-  digest_len += 1;  // for the NULL
   tmp = smartlist_new();
 
   for (; lo < hi; ++lo) {