Node SDK: send accepts malformed user headers that fail during polling
メンテナーはふだん 1 日以内に返信
評価
この issue はまだ評価されていません。
説明
Bug description
The Node SDK accepts malformed user headers when sending messages, but polling those messages fails to decode them.
Confirmed cases:
- Empty raw header value.
- String value longer than 255 bytes.
- Int128 value containing only one byte instead of 16.
- Empty string key.
Each send receives a confirmation at offset 0. Polling then fails with “user headers of the message at offset 0 do not decode.” A valid string header sends and polls successfully.
The encoder should reject these invalid headers before sending. Confirmed against a real server using SDK and server revision 7b053f4cbf635d03ba187123a42c0157ac554587.
Related fixes #4481 (Go) and #4670 (HTTP) do not cover the Node encoder. I would like to contribute a regression test first and discuss the fix approach.
Affected area / component
Node.js SDK
Deployment
Docker (DockerHub image)
Versions
SDK and server revision: 7b053f4cbf635d03ba187123a42c0157ac554587
Server image: apache/iggy:edge
Image digest: sha256:3dba2cd7b16e0362112ae248507b4a7b2eb27593332c6421386011fb1795975d
Hardware / environment
macOS, Node.js v24.4.1, fresh single-node Iggy server in Docker. Tested using the upstream Node SDK over TCP, with isolated container storage.
Sample code
const headers = [{
key: HeaderKeyFactory.String('key'),
value: HeaderValue.Raw(Buffer.alloc(0))
}];
const result = await client.message.send({
streamId,
topicId,
partition: Partitioning.PartitionId(0),
messages: [{ id: 1n, payload: 'repro', headers }]
});
// Send succeeds with a confirmation at offset 0.
await client.message.poll({
streamId,
topicId,
consumer: Consumer.Single,
partitionId: 0,
pollingStrategy: PollingStrategy.First,
count: 1,
autocommit: false
});
// Fails to decode the stored message's headers.
Logs
valid: SEND CONFIRMED offset=0
valid: POLL SUCCEEDED
empty-value: SEND CONFIRMED offset=0
empty-value: POLL FAILED user headers of the message at offset 0 do not decode; cause=Invalid header value length: 0, must be between 1 and 255
Iggy server config
Fresh single-node server with development credentials.
IGGY_HTTP_ADDRESS=0.0.0.0:3000
IGGY_TCP_ADDRESS=0.0.0.0:38090
IGGY_NODE_ADVERTISED_ADDRESS=localhost
TCP port 38090 was published to localhost. No custom persistence settings.
Reproduction
- Start a fresh Iggy server and connect using the Node SDK.
- Create a stream and a topic with one partition.
- Send a message containing a string header key and an empty raw header value, as shown above.
- The send succeeds and confirms offset 0.
- Poll the topic from the first offset.
- Polling fails because the header value length is 0.
Also reproduced with:
- HeaderValue.String('a'.repeat(256))
- HeaderValue.Int128(Buffer.from([1]))
- HeaderKeyFactory.String('') with a nonempty value
A normal nonempty string key and value send and poll successfully.
Contribution
- I'm willing to submit a pull request to fix this bug
Good first issue
- I think this could be a good first issue for a new contributor
- 主要言語
- Rust
- スター
- 5.2k
- フォーク
- 502
- 平均マージ
- 3日 3時間
- マージ済み PR(30日)
- 163
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/iggy のほかの issue
-
Go examples: add a message envelope producer and consumer対応中かも @ThunderGod77 が 4 日前に担当しました。 オープンgo good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/iggy#4694 · コメント 3 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
HTTP client treats a consumer group as a plain consumer対応中かも @mohitduhan19 が 22 日前に担当しました。 オープンbug rust server
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 1 日以内に返信
-
Add the fail-fast connection option to the Rust and Python quick-starts対応中かも @QIW9 が 9 日前に担当しました。 オープンdocs good first issue
難易度 1/5 1〜3時間 初心者へのやさしさ 92/100
メンテナーはふだん 1 日以内に返信
-
ResourceNotFound from the binary protocol prints an empty key対応中かも @xalestar が 1 日前に担当しました。 オープンapi python rust
apache/iggy#4767 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Go SDK: validate personal access token name length before serialization対応中かも @p4rtridge が 2 日前に担当しました。 オープンbug go good first issue
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信
-
bug i18n priority: medium ui
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
storytold/craft-anything#983 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
pbakaus/impeccable#1328 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
Dinnerbone/Rascal#91 · リアクション 2 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
higress-group/HiRoute#405 ·
メンテナーはふだん 1 日以内に返信