Sfoglia il codice sorgente

Fix possible segmentation fault on directory authorities.

The more verbose logs that were added in ee58153 also include a string
that might not have been initialized. This can lead to segfaults, e.g.,
when setting up private Tor networks. Initialize this string with NULL.
Karsten Loesing 15 anni fa
parent
commit
a98643c1b5
3 ha cambiato i file con 7 aggiunte e 4 eliminazioni
  1. 2 0
      ChangeLog
  2. 4 3
      src/or/dirserv.c
  3. 1 1
      src/or/router.c

+ 2 - 0
ChangeLog

@@ -13,6 +13,8 @@ Changes in version 0.2.1.20 - 2009-??-??
 
   o Minor bugfixes:
     - Fix a signed/unsigned compile warning in 0.2.1.19.
+    - Fix possible segmentation fault on directory authorities. Bugfix on
+      0.2.1.14-rc.
 
 
 Changes in version 0.2.1.19 - 2009-07-28

+ 4 - 3
src/or/dirserv.c

@@ -652,8 +652,8 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
 
 /** Examine the parsed server descriptor in <b>ri</b> and maybe insert it into
  * the list of server descriptors. Set *<b>msg</b> to a message that should be
- * passed back to the origin of this descriptor. Use <b>source</b> to produce
- * better log messages.
+ * passed back to the origin of this descriptor, or NULL if there is no such
+ * message. Use <b>source</b> to produce better log messages.
  *
  * Return the status of the operation
  *
@@ -667,6 +667,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
   routerinfo_t *ri_old;
   char *desc, *nickname;
   size_t desclen = 0;
+  *msg = NULL;
 
   /* If it's too big, refuse it now. Otherwise we'll cache it all over the
    * network and it'll clog everything up. */
@@ -718,7 +719,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
       control_event_or_authdir_new_descriptor("REJECTED", desc, desclen, *msg);
     log_info(LD_DIRSERV,
              "Did not add descriptor from '%s' (source: %s): %s.",
-             nickname, source, *msg);
+             nickname, source, *msg ? *msg : "(no message)");
   } else {
     smartlist_t *changed;
     control_event_or_authdir_new_descriptor("ACCEPTED", desc, desclen, *msg);

+ 1 - 1
src/or/router.c

@@ -544,7 +544,7 @@ init_keys(void)
   /* Must be called after keys are initialized. */
   mydesc = router_get_my_descriptor();
   if (authdir_mode(options)) {
-    const char *m;
+    const char *m = NULL;
     routerinfo_t *ri;
     /* We need to add our own fingerprint so it gets recognized. */
     if (dirserv_add_own_fingerprint(options->Nickname, get_identity_key())) {