]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] http_server_error() must not purge a previous pending response
authorWilly Tarreau <w@1wt.eu>
Fri, 22 Jan 2010 13:17:47 +0000 (14:17 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 22 Jan 2010 13:20:17 +0000 (14:20 +0100)
This can cause parts of responses to be truncated in case of
pipelined requests if the second request generates an error
before the first request is completely flushed.

src/proto_http.c

index fcfd9bcea51a30d64e0285342cadf00cbf3d35fe..c9d4124835e1ca8c506ae0d18b505613e1fd5a02 100644 (file)
@@ -619,8 +619,11 @@ int http_remove_header2(struct http_msg *msg, struct buffer *buf,
 static void http_server_error(struct session *t, struct stream_interface *si,
                              int err, int finst, int status, const struct chunk *msg)
 {
+       buffer_auto_read(si->ob);
+       buffer_abort(si->ob);
+       buffer_auto_close(si->ob);
+       buffer_erase(si->ob);
        buffer_erase(si->ob);
-       buffer_erase(si->ib);
        buffer_auto_close(si->ib);
        buffer_auto_read(si->ib);
        if (status > 0 && msg) {