From 4a20972a954b2af0ec75b21e32d2d56ae97a8493 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 29 Aug 2022 15:37:16 +0200 Subject: [PATCH] BUG/MINOR: hlua: Rely on CF_EOI to detect end of message in HTTP applets applet:getline() and applet:receive() functions for HTTP applets must rely on the channel flags to detect the end of the message and not on HTX flags. It means CF_EOI must be used instead of HTX_FL_EOM. It is important because the HTX flag is transient. Because there is no flag on HTTP applets to save the info, it is not reliable. However CF_EOI once set is never removed. So it is safer to rely on it. Otherwise, the call to these functions hang. This patch must be backported as far as 2.4. --- src/hlua.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hlua.c b/src/hlua.c index b5465e8b8ee1..f34f7b6a0af5 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -5058,7 +5058,7 @@ __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)) + if (htx_is_empty(htx) && (req->flags & CF_EOI)) stop = 1; htx_to_buf(htx, &req->buf); @@ -5150,7 +5150,7 @@ __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)) + if (htx_is_empty(htx) && (req->flags & CF_EOI)) len = 0; htx_to_buf(htx, &req->buf);