]> granicus.if.org Git - apache/commitdiff
Merge r1439623 from trunk:
authorJim Jagielski <jim@apache.org>
Mon, 11 Mar 2013 16:32:28 +0000 (16:32 +0000)
committerJim Jagielski <jim@apache.org>
Mon, 11 Mar 2013 16:32:28 +0000 (16:32 +0000)
Fix error because of negative rate-limit
PR : 52964
Submitted by: Tianyin Xu <tixu cs ucsd edu>
Submitted by: jailletc36
Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1455219 13f79535-47bb-0310-9956-ffa450edef68

STATUS
modules/filters/mod_ratelimit.c

diff --git a/STATUS b/STATUS
index 3bfbd8ad892843eb695a23186e7594c76f9cfcac..2944a5322e169f44368c798ca90d2115f22937bd 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -91,12 +91,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
     
-  * mod_rate_limit: Fix error because of negative rate-limit
-    PR 52964 [ianyin Xu <tixu cs ucsd edu>]
-    trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1439623
-    2.4.x patch: trunk patch applies.
-    +1: jailletc36, fuankg, jim
-
   * Set of easy patches to keep 2.4.x in line with trunk
        1442865: Change bzero/bcopy into memset/memcpy (PR 54346)
        1442759: Can't figure out why we allocate len+2 bytes here. Len+1 should be enough.
index 028de361ab317abd1e8f697c1f65a7874ac0316c..611017875e8732139c43fbb8d2f2f5c811ce536d 100644 (file)
@@ -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));