summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2012-07-02 16:59:34 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2012-07-02 16:59:34 +0000
commit63c3d481684fed4d9589d4566d3631e21458d215 (patch)
treea88f85b96aebb59dc17066291bb108f57f861f11
parent02f8e0ecd3ecb9cbd367162e62832e406012755a (diff)
downloadnginx-63c3d481684fed4d9589d4566d3631e21458d215.tar.gz
nginx-63c3d481684fed4d9589d4566d3631e21458d215.tar.bz2
Merge of r4690: conflicting wildcard server names fix.
With previous code wildcard names were added to hash even if conflict was detected. This resulted in identical names in hash and segfault later in ngx_hash_wildcard_init().
-rw-r--r--src/core/ngx_hash.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/core/ngx_hash.c b/src/core/ngx_hash.c
index 7d04f7484..b53294502 100644
--- a/src/core/ngx_hash.c
+++ b/src/core/ngx_hash.c
@@ -924,17 +924,6 @@ wildcard:
}
- hk = ngx_array_push(hwc);
- if (hk == NULL) {
- return NGX_ERROR;
- }
-
- hk->key.len = last - 1;
- hk->key.data = p;
- hk->key_hash = 0;
- hk->value = value;
-
-
/* check conflicts in wildcard hash */
name = keys->elts;
@@ -972,5 +961,18 @@ wildcard:
ngx_memcpy(name->data, key->data + skip, name->len);
+
+ /* add to wildcard hash */
+
+ hk = ngx_array_push(hwc);
+ if (hk == NULL) {
+ return NGX_ERROR;
+ }
+
+ hk->key.len = last - 1;
+ hk->key.data = p;
+ hk->key_hash = 0;
+ hk->value = value;
+
return NGX_OK;
}