mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-16 08:24:42 +00:00
BUG/MEDIUM: backend: fix URI hash when a query string is present
Commit 98634f0
("MEDIUM: backend: Enhance hash-type directive with an
algorithm options") cleaned up the hashing code by using a centralized
function. A bug appeared in get_server_uh() which is the URI hashing
function. Prior to the patch, the function would stop hashing on the
question mark, or on the trailing slash of a maximum directory count.
Consecutive to the patch, this last character is included into the
hash computation. This means that :
GET /0
GET /0?
Are not hashed similarly. The following configuration reproduces it :
mode http
balance uri
server s1 0.0.0.0:1234 redir /s1
server s2 0.0.0.0:1234 redir /s2
Many thanks to Vedran Furac for reporting this issue. The fix must
be backported to 1.5.
This commit is contained in:
parent
e1cfc1f2b4
commit
fad4ffc893
@ -200,7 +200,7 @@ struct server *get_server_uh(struct proxy *px, char *uri, int uri_len)
|
||||
|
||||
start = end = uri;
|
||||
while (uri_len--) {
|
||||
c = *end++;
|
||||
c = *end;
|
||||
if (c == '/') {
|
||||
slashes++;
|
||||
if (slashes == px->uri_dirs_depth1) /* depth+1 */
|
||||
@ -208,6 +208,7 @@ struct server *get_server_uh(struct proxy *px, char *uri, int uri_len)
|
||||
}
|
||||
else if (c == '?' && !px->uri_whole)
|
||||
break;
|
||||
end++;
|
||||
}
|
||||
|
||||
hash = gen_hash(px, start, (end - start));
|
||||
|
Loading…
Reference in New Issue
Block a user