From fb7f90c181dc44ae9f23cb4d16cac25609463d9f Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 26 Jul 2016 09:59:48 -0400 Subject: [PATCH] Tweaks on 19435 fix: * Raise limit: 16k isn't all that high. * Don't log when limit exceded; log later on. * Say "over" when we log more than we say we log. * Add target version to changes file --- changes/bug19435 | 4 ++-- src/common/util.c | 12 ++++-------- src/common/util.h | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/changes/bug19435 b/changes/bug19435 index ccd916be0f..d0a29d1983 100644 --- a/changes/bug19435 +++ b/changes/bug19435 @@ -2,5 +2,5 @@ - Fix an integer overflow in the rate-limiter that caused displaying of wrong number of suppressed messages (if there are too many of them). If the number of messages hits the limit of messages per interval the - rate-limiter drops a warning and doesn't count any further. - Fixes bug 19435. + rate-limiter doesn't count any further. + Fixes bug 19435; bugfix on 0.2.4.11-alpha. diff --git a/src/common/util.c b/src/common/util.c index 72efd897a7..d9361563ef 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1995,12 +1995,7 @@ rate_limit_is_ready(ratelim_t *lim, time_t now) lim->n_calls_since_last_time = 0; return res; } else { - if (lim->n_calls_since_last_time < RATELIM_TOOMANY) { - ++lim->n_calls_since_last_time; - } else if (lim->n_calls_since_last_time == RATELIM_TOOMANY) { - log_warn(LD_GENERAL, - "Enormously large number of messages (%d). It's probably a bug.", - RATELIM_TOOMANY); + if (lim->n_calls_since_last_time <= RATELIM_TOOMANY) { ++lim->n_calls_since_last_time; } @@ -2020,11 +2015,12 @@ rate_limit_log(ratelim_t *lim, time_t now) return tor_strdup(""); } else { char *cp=NULL; + const char *opt_over = (n >= RATELIM_TOOMANY) ? "over " : ""; /* XXXX this is not exactly correct: the messages could have occurred * any time between the old value of lim->allowed and now. */ tor_asprintf(&cp, - " [%d similar message(s) suppressed in last %d seconds]", - n-1, lim->rate); + " [%s%d similar message(s) suppressed in last %d seconds]", + opt_over, n-1, lim->rate); return cp; } } else { diff --git a/src/common/util.h b/src/common/util.h index 837d2e9cf3..a6638aa39b 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -292,7 +292,7 @@ typedef struct ratelim_t { } ratelim_t; #define RATELIM_INIT(r) { (r), 0, 0 } -#define RATELIM_TOOMANY (16*1000) +#define RATELIM_TOOMANY (16*1000*1000) char *rate_limit_log(ratelim_t *lim, time_t now);