]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] ratelimit: fix compatibility with old records 5842/head
authorAndrew Lewis <nerf@judo.za.org>
Thu, 15 Jan 2026 15:33:46 +0000 (17:33 +0200)
committerAndrew Lewis <nerf@judo.za.org>
Thu, 15 Jan 2026 15:33:46 +0000 (17:33 +0200)
lualib/redis_scripts/ratelimit_check.lua
lualib/redis_scripts/ratelimit_update.lua

index 019996c11dbc50e0b2e0a5ea8e280d668a893817..62ba78861ab3a00ccd75bddd5785a84329343ef5 100644 (file)
@@ -57,9 +57,14 @@ if burst + pending > 0 then
   -- If we have any time passed
   if burst > 0 and last < now then
     if enable_dynamic then
-      dynr = tonumber(redis.call('HGET', prefix, 'dr')) / 10000.0
-      if dynr == 0 then
-        dynr = 0.0001
+      dynr = tonumber(redis.call('HGET', prefix, 'dr'))
+      if dynr then
+        dynr = dynr / 10000.0
+        if dynr == 0 then
+          dynr = 0.0001
+        end
+      else
+        dynr = 1.0
       end
     else
       dynr = 1.0
@@ -75,9 +80,14 @@ if burst + pending > 0 then
   end
 
   if enable_dynamic then
-    dynb = tonumber(redis.call('HGET', prefix, 'db')) / 10000.0
-    if dynb == 0 then
-      dynb = 0.0001
+    dynb = tonumber(redis.call('HGET', prefix, 'db'))
+    if dynb then
+      dynb = dynb / 10000.0
+      if dynb == 0 then
+        dynb = 0.0001
+      end
+    else
+      dynb = 1.0
     end
   else
     dynb = 1.0
index 8b7a934dc5c36b3119e7f5e1c762c6c961115cba..6ec0279ec711574b020aeda5ee5bb6a82e143d95 100644 (file)
@@ -32,7 +32,12 @@ if enable_dynamic then
 
   if max_dr > 1 then
     local rate_mult = tonumber(KEYS[3])
-    dr = tonumber(redis.call('HGET', prefix, 'dr')) / 10000
+    dr = tonumber(redis.call('HGET', prefix, 'dr'))
+    if dr then
+      dr = dr / 10000
+    else
+      dr = 1.0
+    end
 
     if rate_mult > 1.0 and dr < max_dr then
       dr = dr * rate_mult
@@ -57,7 +62,12 @@ if enable_dynamic then
   local max_db = tonumber(KEYS[6])
   if max_db > 1 then
     local rate_mult = tonumber(KEYS[4])
-    db = tonumber(redis.call('HGET', prefix, 'db')) / 10000
+    db = tonumber(redis.call('HGET', prefix, 'db'))
+    if db then
+      db = db / 10000
+    else
+      db = 1.0
+    end
 
     if rate_mult > 1.0 and db < max_db then
       db = db * rate_mult