commit 07f2940b4519d801eb10b9f5e49790aced1f6322 Author: Alexander Færøy ahf@0x90.dk Date: Fri Jun 23 23:55:54 2017 +0000
Set published_out for consensus cache entries in spooled_resource_estimate_size().
This patch ensures that the published_out output parameter is set to the current consensus cache entry's "valid after" field.
See: https://bugs.torproject.org/22702 --- src/or/consdiffmgr.c | 18 ++++++++++++++++++ src/or/consdiffmgr.h | 3 +++ src/or/dirserv.c | 6 ++++++ 3 files changed, 27 insertions(+)
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c index 2af1047..4036f66 100644 --- a/src/or/consdiffmgr.c +++ b/src/or/consdiffmgr.c @@ -1840,3 +1840,21 @@ consensus_cache_entry_get_valid_until(const consensus_cache_entry_t *ent, return 0; }
+/** Read the valid after timestamp from the cached object <b>ent</b> into + * *<b>out</b> and return 0, or return -1 if no such time was recorded. */ +int +consensus_cache_entry_get_valid_after(const consensus_cache_entry_t *ent, + time_t *out) +{ + tor_assert(ent); + tor_assert(out); + + const char *s; + s = consensus_cache_entry_get_value(ent, LABEL_VALID_AFTER); + + if (s == NULL || parse_iso_time_nospace(s, out) < 0) + return -1; + else + return 0; +} + diff --git a/src/or/consdiffmgr.h b/src/or/consdiffmgr.h index fe4f9ee..079f9fe 100644 --- a/src/or/consdiffmgr.h +++ b/src/or/consdiffmgr.h @@ -44,6 +44,9 @@ int consensus_cache_entry_get_fresh_until( int consensus_cache_entry_get_valid_until( const struct consensus_cache_entry_t *ent, time_t *out); +int consensus_cache_entry_get_valid_after( + const struct consensus_cache_entry_t *ent, + time_t *out);
void consdiffmgr_rescan(void); int consdiffmgr_cleanup(void); diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 408f58b..4954471 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -14,6 +14,7 @@ #include "connection.h" #include "connection_or.h" #include "conscache.h" +#include "consdiffmgr.h" #include "control.h" #include "directory.h" #include "dirserv.h" @@ -3518,6 +3519,11 @@ spooled_resource_estimate_size(const spooled_resource_t *spooled, } else { cached_dir_t *cached; if (spooled->consensus_cache_entry) { + if (published_out) { + consensus_cache_entry_get_valid_after( + spooled->consensus_cache_entry, published_out); + } + return spooled->cce_len; } if (spooled->cached_dir_ref) {