[tor-commits] [tor/master] Fix a bug in microdescs_add_to_cache when listed_at == -1

nickm at torproject.org nickm at torproject.org
Wed Mar 20 14:55:05 UTC 2013


commit 012068935a632fa3d578cee956b6aed141055379
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Mar 11 16:20:20 2013 -0400

    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
---
 changes/warn-unsigned-time_t |    6 ++++++
 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 5f0c36d..f57f85a 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 ac48930..a1c0e3d 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);
   }





More information about the tor-commits mailing list