aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-03-11 16:20:20 -0400
committerNick Mathewson <nickm@torproject.org>2013-03-11 16:20:20 -0400
commit012068935a632fa3d578cee956b6aed141055379 (patch)
treedd5ec4643fc38f258e8b31e80ae26c8c198b7d6f
parent2f98bf5c9fac4dfd1bb07564ce08b13d1e330252 (diff)
downloadtor-012068935a632fa3d578cee956b6aed141055379.tar
tor-012068935a632fa3d578cee956b6aed141055379.tar.gz
Fix a bug in microdescs_add_to_cache when listed_at == -1
This bug affects hosts where time_t is unsigned, which AFAICT does not include anything we currently support. (It _does_ include OpenVMS, about a month of BSD4.2's history[1], and a lot of the 1970s.) There are probably more bugs when time_t is unsigned. This one was [1] http://mail-index.netbsd.org/tech-userlevel/1998/06/04/0000.html
-rw-r--r--changes/warn-unsigned-time_t6
-rw-r--r--src/or/microdesc.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/changes/warn-unsigned-time_t b/changes/warn-unsigned-time_t
index 5f0c36d09..f57f85ae3 100644
--- a/changes/warn-unsigned-time_t
+++ b/changes/warn-unsigned-time_t
@@ -1,3 +1,9 @@
+ o Minor bugfixes (portability):
+ - On the chance that somebody manages to build Tor on a
+ platform where time_t is unsigned, correct the way that
+ microdesc_add_to_cache handles negative time arguments. Fix for
+ bug 8042; bugfix on 0.2.3.1-alpha.
+
o Build improvements:
- Warn if building on a platform with an unsigned time_t: there
are too many places where Tor currently assumes that time_t can
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index ac48930fa..a1c0e3de7 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -135,7 +135,7 @@ get_microdesc_cache(void)
* ending at <b>eos</b>, and store them in <b>cache</b>. If <b>no_save</b>,
* mark them as non-writable to disk. If <b>where</b> is SAVED_IN_CACHE,
* leave their bodies as pointers to the mmap'd cache. If where is
- * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is positive,
+ * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is not -1,
* set the last_listed field of every microdesc to listed_at. If
* requested_digests is non-null, then it contains a list of digests we mean
* to allow, so we should reject any non-requested microdesc with a different
@@ -155,7 +155,7 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
descriptors = microdescs_parse_from_string(s, eos,
allow_annotations,
copy_body);
- if (listed_at > 0) {
+ if (listed_at != (time_t)-1) {
SMARTLIST_FOREACH(descriptors, microdesc_t *, md,
md->last_listed = listed_at);
}