diff --git a/lib/rate_limiter.rb b/lib/rate_limiter.rb index a0bc4515be8..8645bb003d8 100644 --- a/lib/rate_limiter.rb +++ b/lib/rate_limiter.rb @@ -83,7 +83,10 @@ class RateLimiter def performed! return if rate_unlimited? now = Time.now.to_i - if max <= 0 || (eval_lua(PERFORM_LUA, PERFORM_LUA_SHA, [prefixed_key], [now, @secs, @max]) == 0) + + if ((max || 0) <= 0) || + (eval_lua(PERFORM_LUA, PERFORM_LUA_SHA, [prefixed_key], [now, @secs, @max]) == 0) + raise RateLimiter::LimitExceeded.new(seconds_to_wait, @type) end rescue Redis::CommandError => e diff --git a/spec/components/rate_limiter_spec.rb b/spec/components/rate_limiter_spec.rb index 4ee586ed7db..b7b4e652987 100644 --- a/spec/components/rate_limiter_spec.rb +++ b/spec/components/rate_limiter_spec.rb @@ -96,7 +96,7 @@ describe RateLimiter do context 'max is less than or equal to zero' do it 'should raise the right error' do - [-1, 0].each do |max| + [-1, 0, nil].each do |max| expect do RateLimiter.new(user, "a", max, 60).performed! end.to raise_error(RateLimiter::LimitExceeded)