Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

validateSettings() doesn't validate rateLimits[].period — zero period silently degrades to a 1ms backoff hint

クローズ 初心者向け
#811 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
82/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
typescript
領域
backend

調査の方向性

src/utils/settings-config.ts から始めてください。そこではすでに validateSettings() が pow.periodMs > 0 を検証しています。また src/@types/settings.ts の RateLimit 型を読んでください。その検証の隣に、各 limits.*.rateLimits 配列(および limits.admin.loginRateLimits)を走査するループを追加し、period が 0 より大きくない場合に { path, message } の問題を追加してください。期間が 0 または負の値のとき、起動時の検証が失敗し、問題にパスが示されること、そして既存の設定テストがすべて通ることで完了です。

索引モデルが issue の本文から書いたものです。

説明

Problem

validateSettings() (src/utils/settings-config.ts) enforces pow.periodMs > 0, but nothing validates period on any rateLimits[] entry. The RateLimit type (src/@types/settings.ts) declares period: number as required, so period: 0 passes type checks and startup validation without a word.

Since #807, a rejected request carries a retry-after hint computed as Math.max(1, Math.ceil(period)) ms. With period: 0 that emits a protocol-valid 1ms backoff — the misconfiguration is silently masked instead of failing loudly at startup. (It also degenerates the EWMA decay itself: λ = ln(2)/0, so prior activity decays to zero instantly and every event is judged in isolation.)

Affected arrays

All of these accept a RateLimit[] whose period is never validated:

  • limits.event.rateLimits
  • limits.message.rateLimits
  • limits.connection.rateLimits
  • limits.invoice.rateLimits
  • limits.admissionCheck.rateLimits
  • limits.invite.rateLimits
  • limits.admin.rateLimits and limits.admin.loginRateLimits

Suggested fix

In validateSettings(), next to the existing pow.periodMs check, iterate each rate-limit array and push a { path: 'limits.….rateLimits[i].period', message: 'period must be greater than 0' } issue when !(period > 0) — same style as the existing checks.


From Muse

主要言語
TypeScript
スター
829
フォーク
234
平均マージ
2日 10時間
マージ済み PR(30日)
24

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

cameri/nostream のほかの issue

cameri/nostream の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。