提交 a0ba7b3f 编写于 作者: A antirez

Panic on recursive calls to luaRedisGenericCommand().

Related to issue #2302.
上级 e7aa5fb5
...@@ -213,11 +213,22 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { ...@@ -213,11 +213,22 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
static int argv_size = 0; static int argv_size = 0;
static robj *cached_objects[LUA_CMD_OBJCACHE_SIZE]; static robj *cached_objects[LUA_CMD_OBJCACHE_SIZE];
static size_t cached_objects_len[LUA_CMD_OBJCACHE_SIZE]; static size_t cached_objects_len[LUA_CMD_OBJCACHE_SIZE];
static int inuse = 0; /* Recursive calls detection. */
/* By using Lua debug hooks it is possible to trigger a recursive call
* to luaRedisGenericCommand(), which normally should never happen.
* To make this function reentrant is futile and makes it slower, but
* we should at least detect such a misuse, and abort. */
if (inuse) {
redisPanic("luaRedisGenericCommand() recursive call detected. Are you doing funny stuff with Lua debug hooks?");
}
inuse++;
/* Require at least one argument */ /* Require at least one argument */
if (argc == 0) { if (argc == 0) {
luaPushError(lua, luaPushError(lua,
"Please specify at least one argument for redis.call()"); "Please specify at least one argument for redis.call()");
inuse--;
return 1; return 1;
} }
...@@ -272,6 +283,7 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { ...@@ -272,6 +283,7 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
} }
luaPushError(lua, luaPushError(lua,
"Lua redis() command arguments must be strings or integers"); "Lua redis() command arguments must be strings or integers");
inuse--;
return 1; return 1;
} }
...@@ -408,8 +420,10 @@ cleanup: ...@@ -408,8 +420,10 @@ cleanup:
* return the plain error. */ * return the plain error. */
lua_pushstring(lua,"err"); lua_pushstring(lua,"err");
lua_gettable(lua,-2); lua_gettable(lua,-2);
inuse--;
return lua_error(lua); return lua_error(lua);
} }
inuse--;
return 1; return 1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册