]> git.kaiwu.me - nginx.git/commitdiff
Geo: fixed insertion of ranges specified in descending order.
authorRuslan Ermilov <ru@nginx.com>
Tue, 23 Aug 2016 12:59:14 +0000 (15:59 +0300)
committerRuslan Ermilov <ru@nginx.com>
Tue, 23 Aug 2016 12:59:14 +0000 (15:59 +0300)
src/http/modules/ngx_http_geo_module.c
src/stream/ngx_stream_geo_module.c

index e64380401f55dacd05b16767cff14c59fd8849d2..2794548edbad6252bde0525237309883a4ff0220 100644 (file)
@@ -940,9 +940,14 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx,
             return NGX_CONF_ERROR;
         }
 
-        range->start = (u_short) s;
-        range->end = (u_short) e;
-        range->value = ctx->value;
+        range = a->elts;
+
+        ngx_memmove(&range[1], &range[0],
+                    (a->nelts - 1) * sizeof(ngx_http_geo_range_t));
+
+        range[0].start = (u_short) s;
+        range[0].end = (u_short) e;
+        range[0].value = ctx->value;
 
     next:
 
index 1ee0154d385fad41eddd01f0ac4bc4885d168ad3..5e91c46fbcb8556fd5654ff77903789605e03f8e 100644 (file)
@@ -890,9 +890,14 @@ ngx_stream_geo_add_range(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx,
             return NGX_CONF_ERROR;
         }
 
-        range->start = (u_short) s;
-        range->end = (u_short) e;
-        range->value = ctx->value;
+        range = a->elts;
+
+        ngx_memmove(&range[1], &range[0],
+                    (a->nelts - 1) * sizeof(ngx_stream_geo_range_t));
+
+        range[0].start = (u_short) s;
+        range[0].end = (u_short) e;
+        range[0].value = ctx->value;
 
     next: