mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-11 03:31:36 +00:00
BUG/MEDIUM: lua: In some case, the return of sample-fetche is ignored
When: - A Lua action return data and close the channel. The request status is set to HTTP_MSG_CLOSED for the request and HTTP_MSG_DONE for the response. - HAProxy sets the state HTTP_MSG_ERROR. I don't known why, because there are many line which sets this state. - A Lua sample-fetch is executed, typically for building the log line. - When the Lua sample fetch exits, a control of the data is executed. If HAProxy is currently parsing the request, the request is aborted in order to prevent a segfault or sending corrupted data. This ast control is executed comparing the state HTTP_MSG_BODY. When this state is reached, the request is parsed and no error are possible. When the state is < than HTTP_MSG_BODY, the parser is running. Unfortunately, the code HTTP_MSG_ERROR is just < HTTP_MSG_BODY. When we are in error, we want to terminate the execution of Lua without error. This patch changes the comparaison level. This patch must be backported in 1.6
This commit is contained in:
parent
2fe1b92163
commit
8dc7316a6f
@ -2413,13 +2413,13 @@ static int hlua_check_proto(struct stream *stream, int dir)
|
||||
if (stream->be->mode == PR_MODE_HTTP) {
|
||||
if (dir == SMP_OPT_DIR_REQ &&
|
||||
!(stream->req.analysers & AN_REQ_WAIT_HTTP) &&
|
||||
stream->txn->req.msg_state < HTTP_MSG_BODY) {
|
||||
stream->txn->req.msg_state < HTTP_MSG_ERROR) {
|
||||
stream_int_retnclose(&stream->si[0], &msg);
|
||||
return 0;
|
||||
}
|
||||
else if (dir == SMP_OPT_DIR_RES &&
|
||||
!(stream->res.analysers & AN_RES_WAIT_HTTP) &&
|
||||
stream->txn->rsp.msg_state < HTTP_MSG_BODY) {
|
||||
stream->txn->rsp.msg_state < HTTP_MSG_ERROR) {
|
||||
stream_int_retnclose(&stream->si[0], &msg);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user