BUG/MEDIUM: lua: fix invalid return types in hlua_http_msg_get_body
authorvishnu <vishnu@yubi.in>
Sun, 24 Oct 2021 01:16:24 +0000 (06:46 +0530)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 27 Oct 2021 09:04:16 +0000 (11:04 +0200)
commit0af4bd7bebc5083f835d901479ce4dd23f61f432
treec98d68fe3f479a49cb4f1683f563e2c83622a6fd
parent24a58fbd7ea0d8cdf28defc2d6f93e5e05b36793
BUG/MEDIUM: lua: fix invalid return types in hlua_http_msg_get_body

hlua_http_msg_get_body must return either a Lua string or nil. For some
HTTPMessage objects, HTX_BLK_EOT blocks are also present in the HTX buffer
along with HTX_BLK_DATA blocks. In such cases, _hlua_http_msg_dup will start
copying data into a luaL_Buffer until it encounters an HTX_BLK_EOT. But then
instead of pushing neither the luaL_Buffer nor `nil` to the Lua stack, the
function will return immediately. The end result will be that the caller of
the HTTPMessage.body() method from a Lua filter will see whatever object was
on top of the stack as return value. It may be either a userdata object if
HTTPMessage.body() was called with only two arguments, or the third argument
itself if called with three arguments. Hence HTTPMessage.body() would return
either nil, or HTTPMessage body as Lua string, or a userdata objects, or
number.

This fix ensure that HTTPMessage.body() will always return either a string
or nil.

Reviewed-by: Christopher Faulet <cfaulet@haproxy.com>
src/hlua.c