aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_map.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-05-17 12:17:45 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-05-17 12:17:45 +0100
commitd9a157872055ad382ee653fc864d85768fa989cc (patch)
tree26853ee359f06bb17ea31a857527c6ba6d126634 /src/lua/lua_map.c
parentd024ad57a5738bd05b16436ab740a428e453c47d (diff)
downloadrspamd-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.c22
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;
}
}