summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-12-10 15:50:04 +0000
committerNick Mathewson <nickm@torproject.org>2008-12-10 15:50:04 +0000
commit3e9e1639d73e028ac40664ce6c85e0ed788bb924 (patch)
treeea2ecad8349b9bd4b6c868f71a0cda0d3ccfbcde
parentda1a18d327692fdc2021581579e85ee28c7c60cb (diff)
downloadtor-3e9e1639d73e028ac40664ce6c85e0ed788bb924.tar.gz
tor-3e9e1639d73e028ac40664ce6c85e0ed788bb924.zip
Backport karsten's bug 885 fix.
svn:r17558
-rw-r--r--ChangeLog5
-rw-r--r--src/or/routerlist.c11
2 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 36e17775e5..cf15f0c114 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,11 +10,16 @@ Changes in version 0.2.0.33 - 200?-??-??
- Correct handling of possible malformed authority signing key
certificates with internal signature types. Fixes bug 880.
Bugfix on 0.2.0.3-alpha.
+ - Fix a hard-to-trigger resource leak when logging credential status.
+ CID 349.
o Minor features:
- Report the case where all signatures in a detached set are rejected
differently than the case where there is an error handling the detached
set.
+ - When we realize that another process has modified our cached
+ descriptors, print out a more useful error message rather than
+ triggering an assertion. Fixes bug 885. Patch from Karsten.
Changes in version 0.2.0.32 - 2008-11-20
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 5a43019cb8..19b8b14b15 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -2084,6 +2084,11 @@ signed_descriptor_get_body_impl(signed_descriptor_t *desc,
if (store && store->mmap) {
tor_assert(desc->saved_offset + len <= store->mmap->size);
r = store->mmap->data + offset;
+ } else if (store) {
+ log_err(LD_DIR, "We couldn't read a descriptor that is supposedly "
+ "mmaped in our cache. Is another process running in our data "
+ "directory? Exiting.");
+ exit(1);
}
}
if (!r) /* no mmap, or not in cache. */
@@ -2094,11 +2099,11 @@ signed_descriptor_get_body_impl(signed_descriptor_t *desc,
if (!with_annotations) {
if (memcmp("router ", r, 7) && memcmp("extra-info ", r, 11)) {
char *cp = tor_strndup(r, 64);
- log_err(LD_DIR, "descriptor at %p begins with unexpected string %s",
+ log_err(LD_DIR, "descriptor at %p begins with unexpected string %s. "
+ "Is another process running in our data directory? Exiting.",
desc, escaped(cp));
- tor_free(cp);
+ exit(1);
}
- tor_assert(!memcmp("router ", r, 7) || !memcmp("extra-info ", r, 11));
}
return r;