diff --git a/src/redis.c b/src/redis.c index 77dc174dadcb47efe8360ef4d4f0fa32a347fa30..e3db30f758d57cece165dafaab3b53a503b6dba8 100644 --- a/src/redis.c +++ b/src/redis.c @@ -393,7 +393,8 @@ int dictSdsKeyCompare(void *privdata, const void *key1, return memcmp(key1, key2, l1) == 0; } -/* A case insensitive version used for the command lookup table. */ +/* A case insensitive version used for the command lookup table and other + * places where case insensitive non binary-safe comparison is needed. */ int dictSdsKeyCaseCompare(void *privdata, const void *key1, const void *key2) { @@ -508,6 +509,16 @@ dictType dbDictType = { dictRedisObjectDestructor /* val destructor */ }; +/* server.lua_scripts sha (as sds string) -> scripts (as robj) cache. */ +dictType shaScriptObjectDictType = { + dictSdsCaseHash, /* hash function */ + NULL, /* key dup */ + NULL, /* val dup */ + dictSdsKeyCaseCompare, /* key compare */ + dictSdsDestructor, /* key destructor */ + dictRedisObjectDestructor /* val destructor */ +}; + /* Db->expires */ dictType keyptrDictType = { dictSdsHash, /* hash function */ diff --git a/src/redis.h b/src/redis.h index a091e990a8c509045279a015877b0e2c522085ed..b51a482fdd86d2dbd87aa32eb56400b374091882 100644 --- a/src/redis.h +++ b/src/redis.h @@ -890,6 +890,7 @@ extern dictType setDictType; extern dictType zsetDictType; extern dictType clusterNodesDictType; extern dictType dbDictType; +extern dictType shaScriptObjectDictType; extern double R_Zero, R_PosInf, R_NegInf, R_Nan; extern dictType hashDictType; diff --git a/src/scripting.c b/src/scripting.c index 23404338b40989e92d045477de0eb5b241f711ad..d614f42a13f87d14d383604ff59c1224b8d70fa9 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -532,7 +532,7 @@ void scriptingInit(void) { /* Initialize a dictionary we use to map SHAs to scripts. * This is useful for replication, as we need to replicate EVALSHA * as EVAL, so we need to remember the associated script. */ - server.lua_scripts = dictCreate(&dbDictType,NULL); + server.lua_scripts = dictCreate(&shaScriptObjectDictType,NULL); /* Register the redis commands table and fields */ lua_newtable(lua); diff --git a/tests/unit/scripting.tcl b/tests/unit/scripting.tcl index f96d0fc6489ef878f46780a316b22fdd5d3dd503..f1df11f3c575af536d31168fb56989e7babbabe5 100644 --- a/tests/unit/scripting.tcl +++ b/tests/unit/scripting.tcl @@ -47,6 +47,10 @@ start_server {tags {"scripting"}} { r evalsha 9bd632c7d33e571e9f24556ebed26c3479a87129 0 } {myval} + test {EVALSHA - Can we call a SHA1 in uppercase?} { + r evalsha 9BD632C7D33E571E9F24556EBED26C3479A87129 0 + } {myval} + test {EVALSHA - Do we get an error on invalid SHA1?} { catch {r evalsha NotValidShaSUM 0} e set _ $e