BUG/MINOR: hlua: fixing hlua_http_msg_del_data behavior

GH issue #1885 reported that HTTPMessage.remove() did not
work as expected.

It turns out that underlying hlua_http_msg_del_data() function
was not working properly due to input / output inversion as well
as incorrect user offset handling.

This patch fixes it so that the behavior is the one described in
the documentation.

This could be backported to 2.6 and 2.5.

(cherry picked from commit d7c71b03d8)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
This commit is contained in:
Aurelien DARRAGON
2022-09-28 15:52:18 +02:00
committed by Christopher Faulet
parent 4d4abc49b3
commit 4308695c6a

View File

@ -6696,17 +6696,17 @@ __LJMP static int hlua_http_msg_del_data(lua_State *L)
if (msg->msg_state < HTTP_MSG_DATA)
WILL_LJMP(lua_error(L));
filter = hlua_http_msg_filter(L, 1, msg, &input, &output);
filter = hlua_http_msg_filter(L, 1, msg, &output, &input);
if (!filter || !hlua_filter_from_payload(filter))
WILL_LJMP(lua_error(L));
offset = input + output;
offset = output;
if (lua_gettop(L) > 1) {
offset = MAY_LJMP(luaL_checkinteger(L, 2));
if (offset < 0)
offset = MAX(0, (int)input + offset);
offset += output;
if (offset < output || offset > output + input) {
if (offset > output + input) {
lua_pushfstring(L, "offset out of range.");
WILL_LJMP(lua_error(L));
}