]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: hlua: fixing hlua_http_msg_del_data behavior
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 28 Sep 2022 13:52:18 +0000 (15:52 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 28 Sep 2022 16:43:19 +0000 (18:43 +0200)
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.

src/hlua.c

index b0c4444bce90ba206038b9f0857c7041e5afe991..253d334c9c7f3b2554a573afb7dfcd942e901c51 100644 (file)
@@ -6724,17 +6724,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));
                }