aboutsummaryrefslogtreecommitdiff
path: root/lua_cjson.c
diff options
context:
space:
mode:
Diffstat (limited to 'lua_cjson.c')
-rw-r--r--lua_cjson.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/lua_cjson.c b/lua_cjson.c
index 3a77644..1695979 100644
--- a/lua_cjson.c
+++ b/lua_cjson.c
@@ -1401,10 +1401,21 @@ static int lua_cjson_new(lua_State *l)
1401 /* Initialise number conversions */ 1401 /* Initialise number conversions */
1402 fpconv_init(); 1402 fpconv_init();
1403 1403
1404 /* Create empty array metatable */ 1404 /* Test if empty array metatable is in registry */
1405 lua_pushlightuserdata(l, &json_empty_array); 1405 lua_pushlightuserdata(l, &json_empty_array);
1406 lua_newtable(l); 1406 lua_rawget(l, LUA_REGISTRYINDEX);
1407 lua_rawset(l, LUA_REGISTRYINDEX); 1407 if (lua_isnil(l, -1)) {
1408 /* Create empty array metatable.
1409 *
1410 * If multiple calls to lua_cjson_new() are made,
1411 * this prevents overriding the table at the given
1412 * registry's index with a new one.
1413 */
1414 lua_pop(l, 1);
1415 lua_pushlightuserdata(l, &json_empty_array);
1416 lua_newtable(l);
1417 lua_rawset(l, LUA_REGISTRYINDEX);
1418 }
1408 1419
1409 /* cjson module table */ 1420 /* cjson module table */
1410 lua_newtable(l); 1421 lua_newtable(l);