Limit req: fix of rbtree node insertion on hash collisions.

The rbtree used in ngx_http_limit_req_module has two level of keys, the top is
hash, and the next is the value string itself. However, when inserting a new
node, only hash has been set, while the value string has been left empty.

The bug was introduced in r4419 (1.1.14).

Found by Charles Chen.
This commit is contained in:
Valentin Bartenev 2012-09-03 12:55:50 +00:00
parent 2b52ec5af4
commit 84ed29ca71

View file

@ -444,17 +444,17 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_limit_t *limit, ngx_uint_t hash,
node->key = hash;
ngx_rbtree_insert(&ctx->sh->rbtree, node);
lr = (ngx_http_limit_req_node_t *) &node->color;
ngx_queue_insert_head(&ctx->sh->queue, &lr->queue);
lr->len = (u_char) len;
lr->excess = 0;
ngx_memcpy(lr->data, data, len);
ngx_rbtree_insert(&ctx->sh->rbtree, node);
ngx_queue_insert_head(&ctx->sh->queue, &lr->queue);
if (account) {
lr->last = now;
lr->count = 0;