Streams: ListStreams, DescribeStream and GetRecords accept a Limit the service refuses

オープン
#621 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

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

@LeeroyHannigan がすでに取り組んでいます。

2026年10月28日 から。

  • #633 @LeeroyHannigan による — オープン

評価

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

調査の方向性

Start with crates/engine/src/streams.rs, focusing on handle_list_streams, handle_describe_stream, and handle_get_records; compare their current Limit handling with the operation-specific bounds and error messages in the issue. Check the storage paths cited for Cassandra and PostgreSQL to confirm validation happens before backend calls. Done means each operation rejects Limits below 1 or above its maximum with the measured ValidationException type and message.

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

説明

DynamoDB Streams refuses an out-of-range Limit with a 400 ValidationException. ExtendDB clamps the top of the range on ListStreams and GetRecords, does not check DescribeStream's, and passes a Limit of 0 or below to the storage backend on all three.

Measured on Amazon DynamoDB Streams in us-east-1 on 2026-10-27, with SDK parameter validation turned off so each value reached the service:

Operation Limit Status Response body
ListStreams 0 400 {"__type":"com.amazon.coral.validate#ValidationException","message":"1 validation error detected: Value at 'limit' failed to satisfy constraint: Member must have value greater than or equal to 1"}
ListStreams -1 400 the same body as Limit 0
ListStreams 101 400 {"__type":"com.amazon.coral.validate#ValidationException","message":"One or more parameter values were invalid: Limit cannot be greater than the maximum allowed size: 100"}
DescribeStream 0 400 the same body as ListStreams Limit 0
DescribeStream 101 400 {"__type":"com.amazon.coral.validate#ValidationException","message":"One or more parameter values were invalid: Limit cannot be greater than the maximum: 100"}
GetRecords 0 400 the same body as ListStreams Limit 0
GetRecords 1001 400 {"__type":"com.amazon.coral.validate#ValidationException","message":"One or more parameter values were invalid: Limit should be less than or equal to 1000"}
GetRecords 1000 200

The message for a value above the maximum differs by operation: DescribeStream's ends "the maximum: 100", ListStreams' ends "the maximum allowed size: 100", and GetRecords' reads "Limit should be less than or equal to 1000".

On main (abf8082f):

  • handle_list_streams (crates/engine/src/streams.rs:55) and handle_get_records (streams.rs:307) apply .min(100) and .min(1000), so 101 and 1001 succeed.
  • handle_describe_stream passes the request's Limit to the backend unchanged.
  • A Limit of 0 or below reaches the backend on all three operations. In list_streams, Cassandra computes limit_usize - 1 (crates/storage-cassandra/src/stream_engine.rs:433), which panics in a debug build at Limit 0 when streams exist. PostgreSQL binds limit + 1 into LIMIT (crates/storage-postgres/src/stream_engine.rs, lines 417 to 455), which the database refuses for a Limit of -2 or below.

Fix: refuse a Limit below 1 or above the operation's maximum in the engine, before the backend is called, with the type and message measured above for each operation.

主要言語
Rust
スター
517
フォーク
60
平均マージ
5日 3時間
マージ済み PR(30日)
79

環境構築

はじめの一歩

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

ExtendDB/extenddb のほかの issue

ExtendDB/extenddb の issue をすべて見る

似ている issue

Rust の issue をもっと見る

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

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