]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Merge branch 'fix2183', remote branch 'rransom/fix2195-v2' into maint-0.2.2
authorNick Mathewson <nickm@torproject.org>
Fri, 19 Nov 2010 21:48:13 +0000 (16:48 -0500)
committerNick Mathewson <nickm@torproject.org>
Fri, 19 Nov 2010 21:48:13 +0000 (16:48 -0500)
1  2  3 
src/or/router.c

diff --cc src/or/router.c
index af248c65546a6a63f8f010d6253d789bf014f0a0,9b80247f19d1ae8dfd6ca2ad6e2d9f873d8e02b1,e82945e64cc2387f6669c0ed0d5863f57843bed0..3d4ee70399856520cc947ac040f343e096e1638c
@@@@ -1486,25 -1485,22 -1486,30 +1485,27 @@@@ router_rebuild_descriptor(int force
     ei->cache_info.published_on = ri->cache_info.published_on;
     memcpy(ei->cache_info.identity_digest, ri->cache_info.identity_digest,
            DIGEST_LEN);
- -  ei_size = options->ExtraInfoStatistics ? MAX_EXTRAINFO_UPLOAD_SIZE : 8192;
- -  ei->cache_info.signed_descriptor_body = tor_malloc(ei_size);
- -  if (extrainfo_dump_to_string(ei->cache_info.signed_descriptor_body,
- -                               ei_size, ei,
- -                               get_server_identity_key()) < 0) {
+ +  if (extrainfo_dump_to_string(&ei->cache_info.signed_descriptor_body,
+ +                               ei, get_server_identity_key()) < 0) {
       log_warn(LD_BUG, "Couldn't generate extra-info descriptor.");
--     routerinfo_free(ri);
       extrainfo_free(ei);
--     return -1;
++     ei = NULL;
++   } else {
++     ei->cache_info.signed_descriptor_len =
++       strlen(ei->cache_info.signed_descriptor_body);
++     router_get_extrainfo_hash(ei->cache_info.signed_descriptor_body,
++                               ei->cache_info.signed_descriptor_digest);
     }
--   ei->cache_info.signed_descriptor_len =
--     strlen(ei->cache_info.signed_descriptor_body);
--   router_get_extrainfo_hash(ei->cache_info.signed_descriptor_body,
--                             ei->cache_info.signed_descriptor_digest);
   
     /* Now finish the router descriptor. */
--   memcpy(ri->cache_info.extra_info_digest,
--          ei->cache_info.signed_descriptor_digest,
--          DIGEST_LEN);
++   if (ei) {
++     memcpy(ri->cache_info.extra_info_digest,
++            ei->cache_info.signed_descriptor_digest,
++            DIGEST_LEN);
++   } else {
++     /* ri was allocated with tor_malloc_zero, so there is no need to
++      * zero ri->cache_info.extra_info_digest here. */
++   }
     ri->cache_info.signed_descriptor_body = tor_malloc(8192);
     if (router_dump_router_to_string(ri->cache_info.signed_descriptor_body, 8192,
                                      ri, get_server_identity_key()) < 0) {