diff options
author | Salvatore Sanfilippo <antirez@gmail.com> | 2014-06-11 10:09:02 +0200 |
---|---|---|
committer | Salvatore Sanfilippo <antirez@gmail.com> | 2014-06-11 10:09:02 +0200 |
commit | 3ac1dad77a1c06c063de06946bc0cff2dc9b8934 (patch) | |
tree | d72e125f06a09e5516468a217f49b1e8daeff8d9 | |
parent | 8ef79e72ac890b076df3f35ab8571c01848a53f1 (diff) | |
parent | 76efe1225fcd76cd10d6ea87ae9bec36b17edcfa (diff) | |
download | redis-3ac1dad77a1c06c063de06946bc0cff2dc9b8934.tar.gz |
Merge pull request #1804 from mattsta/lua-regression-1118
Scripting: Fix regression from #1118
-rw-r--r-- | src/scripting.c | 7 | ||||
-rw-r--r-- | tests/unit/scripting.tcl | 7 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/scripting.c b/src/scripting.c index 27964771f..67b373098 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -200,6 +200,11 @@ void luaSortArray(lua_State *lua) { lua_pop(lua,1); /* Stack: array (sorted) */ } +int luaReallyIsString(lua_State *L, int index) { + int t = lua_type(L, index); + return t == LUA_TSTRING; +} + #define LUA_CMD_OBJCACHE_SIZE 32 #define LUA_CMD_OBJCACHE_MAX_LEN 64 int luaRedisGenericCommand(lua_State *lua, int raise_error) { @@ -234,7 +239,7 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { size_t obj_len; char dbuf[64]; - if (lua_isnumber(lua,j+1)) { + if (!luaReallyIsString(lua, j+1) && lua_isnumber(lua, j+1)) { /* We can't use lua_tolstring() for number -> string conversion * since Lua uses a format specifier that loses precision. */ lua_Number num = lua_tonumber(lua,j+1); diff --git a/tests/unit/scripting.tcl b/tests/unit/scripting.tcl index d7b6d2ca0..2c4171aeb 100644 --- a/tests/unit/scripting.tcl +++ b/tests/unit/scripting.tcl @@ -347,6 +347,13 @@ start_server {tags {"scripting"}} { return redis.call("get","foo") } 0 } {9007199254740991} + + test {String containing number precision test (regression of issue #1118)} { + r eval { + redis.call("set", "key", "12039611435714932082") + return redis.call("get", "key") + } 0 + } {12039611435714932082} } # Start a new server since the last test in this stanza will kill the |