diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-03-11 16:20:20 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-03-11 16:20:20 -0400 |
commit | 012068935a632fa3d578cee956b6aed141055379 (patch) | |
tree | dd5ec4643fc38f258e8b31e80ae26c8c198b7d6f | |
parent | 2f98bf5c9fac4dfd1bb07564ce08b13d1e330252 (diff) | |
download | tor-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_t | 6 | ||||
-rw-r--r-- | src/or/microdesc.c | 4 |
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); } |