mirror of
https://github.com/nginx/nginx.git
synced 2025-01-07 06:33:00 -06:00
fix the case when unset domain.tld was matched by *.domain.tld
This commit is contained in:
parent
d1b615815a
commit
1c7d449fa8
@ -88,26 +88,32 @@ ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* the 2 low bits of value have the special meaning:
|
* the 2 low bits of value have the special meaning:
|
||||||
* 00 - value is data pointer,
|
* 00 - value is data pointer for both "example.com"
|
||||||
* 01 - value is pointer to wildcard hash allowing
|
* and "*.example.com";
|
||||||
* "*.example.com" only,
|
* 01 - value is data pointer for "*.example.com" only;
|
||||||
|
* 10 - value is pointer to wildcard hash allowing
|
||||||
|
* both "example.com" and "*.example.com";
|
||||||
* 11 - value is pointer to wildcard hash allowing
|
* 11 - value is pointer to wildcard hash allowing
|
||||||
* both "example.com" and "*.example.com".
|
* "*.example.com" only.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((uintptr_t) value & 1) {
|
if ((uintptr_t) value & 2) {
|
||||||
|
|
||||||
hwc = (ngx_hash_wildcard_t *) ((uintptr_t) value & (uintptr_t) ~3);
|
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
if ((uintptr_t) value & 2) {
|
|
||||||
return hwc->value;
|
|
||||||
|
|
||||||
} else {
|
/* "example.com" */
|
||||||
|
|
||||||
|
if ((uintptr_t) value & 1) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hwc = (ngx_hash_wildcard_t *)
|
||||||
|
((uintptr_t) value & (uintptr_t) ~3);
|
||||||
|
return hwc->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hwc = (ngx_hash_wildcard_t *) ((uintptr_t) value & (uintptr_t) ~3);
|
||||||
|
|
||||||
value = ngx_hash_find_wc_head(hwc, name, n - 1);
|
value = ngx_hash_find_wc_head(hwc, name, n - 1);
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
@ -117,6 +123,18 @@ ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len)
|
|||||||
return hwc->value;
|
return hwc->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((uintptr_t) value & 1) {
|
||||||
|
|
||||||
|
if (n == 0) {
|
||||||
|
|
||||||
|
/* "example.com" */
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (void *) ((uintptr_t) value & (uintptr_t) ~3);
|
||||||
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,11 +180,11 @@ ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* the 2 low bits of value have the special meaning:
|
* the 2 low bits of value have the special meaning:
|
||||||
* 00 - value is data pointer,
|
* 00 - value is data pointer;
|
||||||
* 01 - value is pointer to wildcard hash allowing "example.*".
|
* 11 - value is pointer to wildcard hash allowing "example.*".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((uintptr_t) value & 1) {
|
if ((uintptr_t) value & 2) {
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
@ -567,7 +585,10 @@ ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
|
|||||||
wdc->value = names[n].value;
|
wdc->value = names[n].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
name->value = (void *) ((uintptr_t) wdc | (dot ? 1 : 3));
|
name->value = (void *) ((uintptr_t) wdc | (dot ? 3 : 1));
|
||||||
|
|
||||||
|
} else if (dot) {
|
||||||
|
name->value = (void *) ((uintptr_t) name->value | 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user