]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: lua: Fix dumping of stick table entries for STD_T_DICT
authorAdis Nezirovic <anezirovic@haproxy.com>
Tue, 5 May 2020 11:57:28 +0000 (13:57 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 7 May 2020 13:51:36 +0000 (15:51 +0200)
The issue can easily be reproduced with "stick on" statement

backend BE_NAME
    stick-table type ip size 1k
    stick on src

and calling dump() method on BE_NAME stick table from Lua

Before the fix, HAProxy would return 500 and log something like
the following:
  runtime error: attempt to index a string value from [C] method 'dump'

Where one would expect a Lua table like this:

{
    ["IP_ADDR"] = {
        ["server_id"] = 1,
        ["server_name"] = "srv1"
    }
}

This patch needs to backported to 1.9 and later releases.

src/hlua_fcn.c

index e6f4d7379c5ddb98fa7ffcc226a72018ddc48391..faf9d7de04caa073b44a5a4898d853fe58f677fb 100644 (file)
@@ -588,6 +588,12 @@ static void hlua_stktable_entry(lua_State *L, struct stktable *t, struct stksess
                        lua_pushinteger(L, read_freq_ctr_period(&stktable_data_cast(ptr, std_t_frqp),
                                        t->data_arg[dt].u));
                        break;
+               case STD_T_DICT: {
+                       struct dict_entry *de;
+                       de = stktable_data_cast(ptr, std_t_dict);
+                       lua_pushstring(L, de ? (char *)de->value.key : "-");
+                       break;
+               }
                }
 
                lua_settable(L, -3);