diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-05-17 12:17:45 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-05-17 12:17:45 +0100 |
commit | d9a157872055ad382ee653fc864d85768fa989cc (patch) | |
tree | 26853ee359f06bb17ea31a857527c6ba6d126634 /src/lua/lua_map.c | |
parent | d024ad57a5738bd05b16436ab740a428e453c47d (diff) | |
download | rspamd-d9a157872055ad382ee653fc864d85768fa989cc.tar.gz rspamd-d9a157872055ad382ee653fc864d85768fa989cc.zip |
[Fix] Fix compatibility with old maps query logic
Diffstat (limited to 'src/lua/lua_map.c')
-rw-r--r-- | src/lua/lua_map.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index 2d2a098d2..fe8c264d2 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -697,6 +697,20 @@ lua_map_process_string_key (lua_State *L, gint pos, gsize *len) return NULL; } +static inline void +lua_push_map_str_elt (lua_State *L, const gchar *value, gint len) +{ + if (len == 0 || value[0] == '\0') { + lua_pushstring (L, "1"); /* Compatibility */ + } + else if (len == -1) { + lua_pushstring (L, value); /* Zero terminated */ + } + else { + lua_pushlstring (L, value, len); + } +} + /* Radix and hash table functions */ static gint lua_map_get_key (lua_State * L) @@ -771,7 +785,7 @@ lua_map_get_key (lua_State * L) } if (ret) { - lua_pushstring (L, value); + lua_push_map_str_elt (L, value, -1); return 1; } } @@ -790,7 +804,7 @@ lua_map_get_key (lua_State * L) len); if (value) { - lua_pushstring (L, value); + lua_push_map_str_elt (L, value, -1); return 1; } } @@ -810,7 +824,7 @@ lua_map_get_key (lua_State * L) lua_createtable (L, ar->len, 0); PTR_ARRAY_FOREACH (ar, i, val) { - lua_pushstring (L, val); + lua_push_map_str_elt (L, val, -1); lua_rawseti (L, -2, i + 1); } @@ -829,7 +843,7 @@ lua_map_get_key (lua_State * L) } if (value) { - lua_pushstring (L, value); + lua_push_map_str_elt (L, value, -1); return 1; } } |