From: Christopher Faulet Date: Tue, 18 Dec 2018 15:43:35 +0000 (+0100) Subject: BUG/MEDIUM: lua/htx: Handle EOM in receive/get_line calls in HTTP applets X-Git-Tag: v1.9.0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e461e34d64bb1f161500a9cfd628978332578a3c;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: lua/htx: Handle EOM in receive/get_line calls in HTTP applets In HTTP applets, the request's EOM was removed like other blocks when receive or get_line was called from lua scripts. So it was impossible to stop receiving data on successive calls when all the request body was already consumed, blocking infinitly the applet. Now, we never consume the EOM. So it is easy to interrupt receive/get_line calls. In all cases, this block is consumed when the applet ends. --- diff --git a/src/hlua.c b/src/hlua.c index 13e03cef73..79b486da8e 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -4240,6 +4240,11 @@ __LJMP static int hlua_applet_htx_getline_yield(lua_State *L, int status, lua_KC uint32_t vlen; char *nl; + if (type == HTX_BLK_EOM) { + stop = 1; + break; + } + vlen = sz; if (vlen > count) { if (type != HTX_BLK_DATA) @@ -4409,6 +4414,11 @@ __LJMP static int hlua_applet_htx_recv_yield(lua_State *L, int status, lua_KCont struct ist v; uint32_t vlen; + if (type == HTX_BLK_EOM) { + len = 0; + break; + } + vlen = sz; if (len > 0 && vlen > len) vlen = len;