summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeir Shpilraien (Spielrein) <meir@redis.com>2022-01-03 19:04:29 +0200
committerGitHub <noreply@github.com>2022-01-03 19:04:29 +0200
commit78a62c012438a8ae23161f6cfef8159e3a254524 (patch)
treea5e581edb68556e2f59408d11f6ba2af19fda64f
parent5460c100471fda537468d1f1fa43258638c8a1ce (diff)
downloadredis-78a62c012438a8ae23161f6cfef8159e3a254524.tar.gz
Fix OOM error not raised of functions (#10048)
OOM Error did not raise on functions due to a bug. Added test to verify the fix.
-rw-r--r--src/server.c5
-rw-r--r--tests/unit/scripting.tcl14
2 files changed, 18 insertions, 1 deletions
diff --git a/src/server.c b/src/server.c
index 78f3c8bfb..6b65a460c 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3451,7 +3451,10 @@ int processCommand(client *c) {
/* Save out_of_memory result at script start, otherwise if we check OOM
* until first write within script, memory used by lua stack and
* arguments might interfere. */
- if (c->cmd->proc == evalCommand || c->cmd->proc == evalShaCommand) {
+ if (c->cmd->proc == evalCommand ||
+ c->cmd->proc == evalShaCommand ||
+ c->cmd->proc == fcallCommand)
+ {
server.script_oom = out_of_memory;
}
}
diff --git a/tests/unit/scripting.tcl b/tests/unit/scripting.tcl
index 0b5b261f2..970cab992 100644
--- a/tests/unit/scripting.tcl
+++ b/tests/unit/scripting.tcl
@@ -36,6 +36,20 @@ if {$is_eval == 1} {
start_server {tags {"scripting"}} {
+ test {Script - disallow write on OOM} {
+ r FUNCTION create lua f1 replace { return redis.call('set', 'x', '1') }
+
+ r config set maxmemory 1
+
+ catch {[r fcall f1 1 k]} e
+ assert_match {*command not allowed when used memory*} $e
+
+ catch {[r eval "redis.call('set', 'x', 1)" 0]} e
+ assert_match {*command not allowed when used memory*} $e
+
+ r config set maxmemory 0
+ }
+
test {EVAL - Does Lua interpreter replies to our requests?} {
run_script {return 'hello'} 0
} {hello}