|
|
- commit 64a7cbf4ea3276b72ffb121acab676542cebde1b
- Author: Willy Tarreau <w@1wt.eu>
- Date: Tue Nov 20 04:47:38 2018 +0100
-
- BUG/MEDIUM: hpack: fix encoding of "accept-ranges" field
-
- James Brown reported that when an "accept-ranges" header field is sent
- through haproxy and converted from HTTP/1.1 to H2, it's mis-encoded as
- "accept-language". It happens that it's one of the few very common header
- fields encoded using its index value and that this index value was misread
- in the spec as 17 instead of 18, resulting in the wrong name being sent.
- Thanks to Lukas for spotting the issue in the HPACK encoder itself.
-
- This fix must be backported to 1.8.
-
- (cherry picked from commit 4bf194cbdbcda8ec4ce83d7f12d2fe9b08483c94)
- [wla: buffer API edit]
- Signed-off-by: William Lallemand <wlallemand@haproxy.org>
-
- diff --git a/src/hpack-enc.c b/src/hpack-enc.c
- index d1f68c58..99c73103 100644
- --- a/src/hpack-enc.c
- +++ b/src/hpack-enc.c
- @@ -101,7 +101,7 @@ int hpack_encode_header(struct chunk *out, const struct ist n, const struct ist
- else if (isteq(n, ist("last-modified")))
- out->str[len++] = 0x6c; // literal with indexing -- name="last-modified" (idx 44)
- else if (isteq(n, ist("accept-ranges")))
- - out->str[len++] = 0x51; // literal with indexing -- name="accept-ranges" (idx 17)
- + out->str[len++] = 0x52; // literal with indexing -- name="accept-ranges" (idx 18)
- else if (isteq(n, ist("cache-control")))
- out->str[len++] = 0x58; // literal with indexing -- name="cache-control" (idx 24)
- else if (isteq(n, ist("content-length")))
|