commit 71258f630516c4b5f83a731aa9b379583703f99f
parent 38b1fe1fe4c44205e270c005b9ad8fb07106ccb5
Author: Florian Dold <florian@dold.me>
Date: Tue, 28 Oct 2025 18:38:43 +0100
util: fix logic bug in request throttler
Diffstat:
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/packages/taler-util/src/RequestThrottler.ts b/packages/taler-util/src/RequestThrottler.ts
@@ -58,17 +58,21 @@ class OriginState {
if (d.d_ms === "forever") {
throw Error("assertion failed");
}
+ // Be lazy and avoid rounding issues.
+ if (d.d_ms < 1000 / MAX_PER_SECOND) {
+ return;
+ }
this.tokensSecond = Math.min(
MAX_PER_SECOND,
- this.tokensSecond + d.d_ms / 1000,
+ this.tokensSecond + (d.d_ms / 1000) * MAX_PER_SECOND,
);
this.tokensMinute = Math.min(
MAX_PER_MINUTE,
- this.tokensMinute + d.d_ms / 1000 / 60,
+ this.tokensMinute + (d.d_ms / 1000 / 60) * MAX_PER_MINUTE,
);
this.tokensHour = Math.min(
MAX_PER_HOUR,
- this.tokensHour + d.d_ms / 1000 / 60 / 60,
+ this.tokensHour + (d.d_ms / 1000 / 60 / 60) * MAX_PER_HOUR,
);
this.lastUpdate = now;
}