mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-19 12:10:46 +00:00
BUG/MEDIUM: stream: Be sure to never assign a TCP backend to an HTX stream
With a TCP frontend, it is possible to upgrade a connection to HTTP when the backend is in HTTP mode. Concretly the upgrade install a new mux. So, once it is done, the downgrade to TCP is no longer possible. So we must take care to never assign a TCP backend to a stream on this connection. Otherwise, HAProxy crashes because raw data from the server are handled as structured data on the client side. This patch fixes the issue #420. It must be backported to all versions supporting the HTX.
This commit is contained in:
parent
6716cc2b93
commit
eec7f8ac01
@ -1477,6 +1477,14 @@ int stream_set_backend(struct stream *s, struct proxy *be)
|
||||
s->flags |= SF_HTX;
|
||||
}
|
||||
}
|
||||
else if (IS_HTX_STRM(s) && be->mode != PR_MODE_HTTP) {
|
||||
/* If a TCP backend is assgiend to an HTX stream, return
|
||||
* an error. It may happens for a new stream on a
|
||||
* previously upgraded connnections. */
|
||||
if (!(s->flags & SF_ERR_MASK))
|
||||
s->flags |= SF_ERR_INTERNAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* we may request to parse a request body */
|
||||
if (be->options & PR_O_WREQ_BODY)
|
||||
|
Loading…
Reference in New Issue
Block a user