aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
}
}