mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
BUG/MINOR: hlua: Detect end of request when reading data for an HTTP applet
When a script retrieves request data from an HTTP applet, line per line or not, we must be sure to properly detect the end of the request by checking HTX_FL_EOM flag when everything was consumed. Otherwise, the script may hang. It is pretty easy to reproduce the bug by calling applet:receive() without specifying any length. If the request is not chunked, the function never returns. The bug was introduced when the EOM block was removed. Thus, it is specific to the 2.4. This patch should fix the issue #1207. No backport needed.
This commit is contained in:
parent
8043e831d1
commit
eccb31c939
12
src/hlua.c
12
src/hlua.c
@ -4420,6 +4420,12 @@ __LJMP static int hlua_applet_http_getline_yield(lua_State *L, int status, lua_K
|
||||
}
|
||||
}
|
||||
|
||||
/* The message was fully consumed and no more data are expected
|
||||
* (EOM flag set).
|
||||
*/
|
||||
if (htx_is_empty(htx) && (htx->flags & HTX_FL_EOM))
|
||||
stop = 1;
|
||||
|
||||
htx_to_buf(htx, &req->buf);
|
||||
if (!stop) {
|
||||
si_cant_get(si);
|
||||
@ -4506,6 +4512,12 @@ __LJMP static int hlua_applet_http_recv_yield(lua_State *L, int status, lua_KCon
|
||||
}
|
||||
}
|
||||
|
||||
/* The message was fully consumed and no more data are expected
|
||||
* (EOM flag set).
|
||||
*/
|
||||
if (htx_is_empty(htx) && (htx->flags & HTX_FL_EOM))
|
||||
len = 0;
|
||||
|
||||
htx_to_buf(htx, &req->buf);
|
||||
|
||||
/* If we are no other data available, yield waiting for new data. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user