haproxy/src
Willy Tarreau 7c1c217426 BUG/MEDIUM: http: fix header removal when previous header ends with pure LF
In 1.4-dev7, a header removal mechanism was introduced with commit 68085d8
("[MINOR] http: add http_remove_header2() to remove a header value."). Due
to a typo in the function, the beginning of the headers gets desynchronized
if the header preceeding the deleted one ends with an LF/CRLF combination
different form the one of the removed header. The reason is that while
rewinding the pointer, we go back by a number of bytes taking into account
the LF/CRLF status of the removed header instead of the previous one. The
case where it fails is in http-request del-header/set-header where the
multiple occurrences of a header are present and their LF/CRLF ending
differs from the preceeding header. The loop then stops because no more
headers are found given that the names and length do not match.

Another point to take into consideration is that removing headers using
a loop of http_find_header2() and this function is inefficient since we
remove values one at a time while it could be simpler and faster to
remove full header lines. This is something that should be addressed
separately.

This fix must be backported to 1.5 and 1.4. Note that http-send-name-header
relies on this function as well so it could be possible that some of the
issues encountered with it in 1.4 come from this bug.
2015-01-07 17:23:50 +01:00
..
acl.c BUG/MEDIUM: pattern: don't load more than once a pattern list. 2014-11-24 15:40:16 +01:00
appsession.c
arg.c
auth.c BUG/MEDIUM: auth: fix segfault with http-auth and a configuration with an unknown encryption algorithm 2014-08-29 21:06:31 +02:00
backend.c BUG/MEDIUM: backend: correctly detect the domain when use_domain_only is used 2015-01-04 19:35:04 +01:00
base64.c
buffer.c MINOR: config: implement global setting tune.buffers.limit 2014-12-24 23:47:33 +01:00
cfgparse.c MINOR: logs: add a new per-proxy "log-tag" directive 2015-01-07 15:03:42 +01:00
channel.c MEDIUM: channel: implement a zero-copy buffer transfer 2014-12-24 23:47:33 +01:00
checks.c MINOR: checks: update dynamic environment variables in external checks 2014-12-28 01:22:56 +01:00
chunk.c BUG/MINOR: chunk: Fix function chunk_strcmp and chunk_strcasecmp match a substring. 2014-05-09 19:16:13 +02:00
compression.c MEDIUM: buffer: use b_alloc() to allocate and initialize a buffer 2014-12-24 23:47:32 +01:00
connection.c MAJOR: namespace: add Linux network namespace support 2014-11-21 07:51:57 +01:00
cttproxy.c
dumpstats.c CLEANUP: session: remove session_from_task() 2014-12-28 12:19:57 +01:00
ev_epoll.c CLEANUP: epoll: epoll_events should be allocated according to global.tune.maxpollevents 2014-12-17 17:04:53 +01:00
ev_kqueue.c MAJOR: polling: centralize calls to I/O callbacks 2014-11-21 20:37:32 +01:00
ev_poll.c MAJOR: polling: centralize calls to I/O callbacks 2014-11-21 20:37:32 +01:00
ev_select.c MAJOR: polling: centralize calls to I/O callbacks 2014-11-21 20:37:32 +01:00
fd.c MAJOR: polling: centralize calls to I/O callbacks 2014-11-21 20:37:32 +01:00
freq_ctr.c
frontend.c BUG/MAJOR: frontend: initialize capture pointers earlier 2014-11-18 18:53:43 +01:00
haproxy-systemd-wrapper.c BUG/MEDIUM: remove debugging code from systemd-wrapper 2014-09-24 12:59:25 +02:00
haproxy.c MAJOR: session: only wake up as many sessions as available buffers permit 2014-12-24 23:47:33 +01:00
hash.c BUG/MEDIUM: backend: Update hash to use unsigned int throughout 2014-07-08 22:00:21 +02:00
hdr_idx.c
i386-linux-vsys.c
lb_chash.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_fas.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_fwlc.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_fwrr.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_map.c MINOR: server: make use of srv_is_usable() instead of checking eweight 2014-05-23 14:29:11 +02:00
listener.c MEDIUM: listener: support rebinding during resume() 2014-07-08 01:13:35 +02:00
log.c MINOR: logs: add a new per-proxy "log-tag" directive 2015-01-07 15:03:42 +01:00
map.c BUG/MEDIUM: patterns: last fix was still not enough 2014-04-28 14:19:17 +02:00
memory.c MEDIUM: memory: improve pool_refill_alloc() to pass a refill count 2014-12-24 23:47:31 +01:00
namespace.c MAJOR: namespace: add Linux network namespace support 2014-11-21 07:51:57 +01:00
pattern.c BUG/MEDIUM: patterns: previous fix was incomplete 2014-11-26 13:17:03 +01:00
payload.c BUG/MEDIUM: payload: ensure that a request channel is available 2014-11-26 13:32:22 +01:00
peers.c CLEANUP: session: remove session_from_task() 2014-12-28 12:19:57 +01:00
pipe.c
proto_http.c BUG/MEDIUM: http: fix header removal when previous header ends with pure LF 2015-01-07 17:23:50 +01:00
proto_tcp.c BUG/MAJOR: namespaces: conn->target is not necessarily a server 2014-12-24 13:47:55 +01:00
proto_uxst.c BUG/MEDIUM: unix: completely unbind abstract sockets during a pause() 2014-07-08 01:13:35 +02:00
protocol.c
proxy.c BUG/MEDIUM: http: adjust close mode when switching to backend 2014-09-30 18:44:22 +02:00
queue.c MINOR: server: make use of srv_is_usable() instead of checking eweight 2014-05-23 14:29:11 +02:00
raw_sock.c BUG/MINOR: raw_sock: also consider ENOTCONN in addition to EAGAIN for recv() 2014-03-04 07:27:18 +01:00
rbtree.c
regex.c MEDIUM: regex: Use pcre_study always when PCRE is used, regardless of JIT 2014-11-18 13:26:18 +01:00
sample.c BUG/MEDIUM: sample: fix random number upper-bound 2014-12-10 22:45:34 +01:00
server.c MAJOR: namespace: add Linux network namespace support 2014-11-21 07:51:57 +01:00
session.c MAJOR: session: only wake up as many sessions as available buffers permit 2014-12-24 23:47:33 +01:00
sessionhash.c
shctx.c MINOR: stats: add counters for SSL cache lookups and misses 2014-05-28 16:53:04 +02:00
signal.c
ssl_sock.c BUILD: ssl: use OPENSSL_NO_OCSP to detect OCSP support 2014-12-09 20:49:22 +01:00
standard.c MINOR: sample: add "json" converter 2014-10-26 06:41:12 +01:00
stick_table.c BUG/MAJOR: tcp: fix a possible busy spinning loop in content track-sc* 2014-07-30 08:56:35 +02:00
stream_interface.c OPTIM: stream-int: try to send pending spliced data 2014-12-24 23:47:33 +01:00
task.c
time.c
trace.c
uri_auth.c