From e50b9a0757f9e6432c5b8e1f05fee03c0576a7ca Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 8 Jan 2016 15:42:43 +0100 Subject: [PATCH] Scripting: handle trailing comments. This fix, provided by Paul Kulchenko (@pkulchenko), allows the Lua scripting engine to evaluate statements with a trailing comment like the following one: EVAL "print() --comment" 0 Lua can't parse the above if the string does not end with a newline, so now a final newline is always added automatically. This does not change the SHA1 of scripts since the SHA1 is computed on the body we pass to EVAL, without the other code we add to register the function. Close #2951. --- src/scripting.c | 2 +- tests/unit/scripting.tcl | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/scripting.c b/src/scripting.c index 53c0c9ed..dfaea1d0 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -895,7 +895,7 @@ int luaCreateFunction(redisClient *c, lua_State *lua, char *funcname, robj *body funcdef = sdscatlen(funcdef,funcname,42); funcdef = sdscatlen(funcdef,"() ",3); funcdef = sdscatlen(funcdef,body->ptr,sdslen(body->ptr)); - funcdef = sdscatlen(funcdef," end",4); + funcdef = sdscatlen(funcdef,"\nend",4); if (luaL_loadbuffer(lua,funcdef,sdslen(funcdef),"@user_script")) { addReplyErrorFormat(c,"Error compiling script (new function): %s\n", diff --git a/tests/unit/scripting.tcl b/tests/unit/scripting.tcl index e1cd2174..ce7d8037 100644 --- a/tests/unit/scripting.tcl +++ b/tests/unit/scripting.tcl @@ -272,6 +272,10 @@ start_server {tags {"scripting"}} { } 0 } {} + test {EVAL - Able to parse trailing comments} { + r eval {return 'hello' --trailing comment} 0 + } {hello} + test {SCRIPTING FLUSH - is able to clear the scripts cache?} { r set mykey myval set v [r evalsha fd758d1589d044dd850a6f05d52f2eefd27f033f 1 mykey]