mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
r12553@catbus: nickm | 2007-04-30 01:32:54 -0400
Backport candidate: Add asserts to dirserv_remove_invalid, and fix a bug in dirserv_remove_invalid that could mess with pointers in a freed routerinfo right after it was freed. svn:r10052
This commit is contained in:
parent
743a8cf0eb
commit
f7acc3cfa0
@ -86,6 +86,9 @@ Changes in version 0.2.0.1-alpha - 2007-??-??
|
|||||||
we restart.
|
we restart.
|
||||||
- Correctly enforce that elements of directory objects do not appear
|
- Correctly enforce that elements of directory objects do not appear
|
||||||
more often than they are allowed to appear.
|
more often than they are allowed to appear.
|
||||||
|
- Fix a bug in dirserv_remove_invalid() that would cause authorities to
|
||||||
|
corrupt memory under some really unlikely scenarios.
|
||||||
|
- Add even more asserts to hunt down bug 417.
|
||||||
|
|
||||||
o Minor bugfixes (controller), reported by daejees:
|
o Minor bugfixes (controller), reported by daejees:
|
||||||
- Make 'getinfo fingerprint' return a 551 error if we're not a
|
- Make 'getinfo fingerprint' return a 551 error if we're not a
|
||||||
|
@ -621,6 +621,8 @@ directory_remove_invalid(void)
|
|||||||
int changed = 0;
|
int changed = 0;
|
||||||
routerlist_t *rl = router_get_routerlist();
|
routerlist_t *rl = router_get_routerlist();
|
||||||
|
|
||||||
|
routerlist_assert_ok(rl);
|
||||||
|
|
||||||
for (i = 0; i < smartlist_len(rl->routers); ++i) {
|
for (i = 0; i < smartlist_len(rl->routers); ++i) {
|
||||||
const char *msg;
|
const char *msg;
|
||||||
routerinfo_t *ent = smartlist_get(rl->routers, i);
|
routerinfo_t *ent = smartlist_get(rl->routers, i);
|
||||||
@ -630,6 +632,7 @@ directory_remove_invalid(void)
|
|||||||
ent->nickname, msg?msg:"");
|
ent->nickname, msg?msg:"");
|
||||||
routerlist_remove(rl, ent, i--, 0);
|
routerlist_remove(rl, ent, i--, 0);
|
||||||
changed = 1;
|
changed = 1;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (bool_neq((r & FP_NAMED), ent->is_named)) {
|
if (bool_neq((r & FP_NAMED), ent->is_named)) {
|
||||||
log_info(LD_DIRSERV,
|
log_info(LD_DIRSERV,
|
||||||
@ -653,6 +656,8 @@ directory_remove_invalid(void)
|
|||||||
}
|
}
|
||||||
if (changed)
|
if (changed)
|
||||||
directory_set_dirty();
|
directory_set_dirty();
|
||||||
|
|
||||||
|
routerlist_assert_ok(rl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Write a list of unregistered descriptors into a newly allocated
|
/** Write a list of unregistered descriptors into a newly allocated
|
||||||
|
@ -4674,7 +4674,7 @@ routerlist_assert_ok(routerlist_t *rl)
|
|||||||
digestmap_iter_t *iter;
|
digestmap_iter_t *iter;
|
||||||
routerinfo_t *r2;
|
routerinfo_t *r2;
|
||||||
signed_descriptor_t *sd2;
|
signed_descriptor_t *sd2;
|
||||||
if (!routerlist)
|
if (!rl);
|
||||||
return;
|
return;
|
||||||
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, r,
|
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, r,
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user