Selaa lähdekoodia

Try to fix authdir_newdesc events

We were sending values that were truncated by the length of the
annotations.
Nick Mathewson 9 vuotta sitten
vanhempi
commit
76d8c23ab4
2 muutettua tiedostoa jossa 7 lisäystä ja 4 poistoa
  1. 3 0
      changes/bug14953
  2. 4 4
      src/or/dirserv.c

+ 3 - 0
changes/bug14953

@@ -0,0 +1,3 @@
+  o Minor bugfixes (directory authority):
+    - Fix a bug that was truncating AUTHDIR_NEWDESC events sent to the
+      control port. Fixes bug 14953; bugfix on 0.2.0.1-alpha.

+ 4 - 4
src/or/dirserv.c

@@ -537,7 +537,8 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
   was_router_added_t r;
   routerinfo_t *ri_old;
   char *desc, *nickname;
-  size_t desclen = 0;
+  const size_t desclen = ri->cache_info.signed_descriptor_len +
+      ri->cache_info.annotations_len;
   *msg = NULL;
 
   /* If it's too big, refuse it now. Otherwise we'll cache it all over the
@@ -551,7 +552,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
     *msg = "Router descriptor was too large.";
     control_event_or_authdir_new_descriptor("REJECTED",
                ri->cache_info.signed_descriptor_body,
-               ri->cache_info.signed_descriptor_len, *msg);
+                                            desclen, *msg);
     routerinfo_free(ri);
     return ROUTER_AUTHDIR_REJECTS;
   }
@@ -572,14 +573,13 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
       "the last one with this identity.";
     control_event_or_authdir_new_descriptor("DROPPED",
                          ri->cache_info.signed_descriptor_body,
-                         ri->cache_info.signed_descriptor_len, *msg);
+                                            desclen, *msg);
     routerinfo_free(ri);
     return ROUTER_IS_ALREADY_KNOWN;
   }
 
   /* Make a copy of desc, since router_add_to_routerlist might free
    * ri and its associated signed_descriptor_t. */
-  desclen = ri->cache_info.signed_descriptor_len;
   desc = tor_strndup(ri->cache_info.signed_descriptor_body, desclen);
   nickname = tor_strdup(ri->nickname);