From 4aecaa528f054b323a4a04bf72ab3982d6c28137 Mon Sep 17 00:00:00 2001 From: Christophe Jaillet Date: Mon, 28 Jan 2013 20:57:10 +0000 Subject: [PATCH] Fix error because of negative rate-limit PR : 52964 Submitted by: Tianyin Xu git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1439623 13f79535-47bb-0310-9956-ffa450edef68 --- modules/filters/mod_ratelimit.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/filters/mod_ratelimit.c b/modules/filters/mod_ratelimit.c index 028de361ab..611017875e 100644 --- a/modules/filters/mod_ratelimit.c +++ b/modules/filters/mod_ratelimit.c @@ -74,6 +74,7 @@ rate_limit_filter(ap_filter_t *f, apr_bucket_brigade *input_bb) if (ctx == NULL) { const char *rl = NULL; + int ratelimit; /* no subrequests. */ if (f->r->main != NULL) { @@ -87,22 +88,21 @@ rate_limit_filter(ap_filter_t *f, apr_bucket_brigade *input_bb) ap_remove_output_filter(f); return ap_pass_brigade(f->next, bb); } - - /* first run, init stuff */ - ctx = apr_palloc(f->r->pool, sizeof(rl_ctx_t)); - f->ctx = ctx; - ctx->speed = 0; - ctx->state = RATE_LIMIT; - + /* rl is in kilo bytes / second */ - ctx->speed = atoi(rl) * 1024; - - if (ctx->speed == 0) { + ratelimit = atoi(rl) * 1024; + if (ratelimit <= 0) { /* remove ourselves */ ap_remove_output_filter(f); return ap_pass_brigade(f->next, bb); } + /* first run, init stuff */ + ctx = apr_palloc(f->r->pool, sizeof(rl_ctx_t)); + f->ctx = ctx; + ctx->state = RATE_LIMIT; + ctx->speed = ratelimit; + /* calculate how many bytes / interval we want to send */ /* speed is bytes / second, so, how many (speed / 1000 % interval) */ ctx->chunk_size = (ctx->speed / (1000 / RATE_INTERVAL_MS)); -- 2.40.0