`ZDIFFSTORE` and `ZINTERSTORE` with numkeys 0 crash the server (SIGSEGV)
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 35/100
調査の方向性
Start with CommandZDiffStore::Parse and CommandZUnionStore::Parse in src/commands/cmd_zset.cc, then compare their numkeys validation with CommandZDiff::Parse and CommandZInter. Add coverage for zero numkeys to the relevant command tests and confirm both store commands return errors without crashing. Pull request #3731 is already open for this issue.
索引モデルが issue の本文から書いたものです。
説明
Search before asking
- I had searched in the issues and found no similar issues.
Version
Kvrocks 2.17.0 (commit 185d4221), Docker image apache/kvrocks:2.17.0 (same as latest), Linux
x86_64. The code involved is unchanged on unstable.
Minimal reproduce step
docker run -d --name kvrocks -p 6666:6666 apache/kvrocks:2.17.0
redis-cli -p 6666 ZADD s 1 a
redis-cli -p 6666 ZDIFFSTORE dst 0 s # server crashes
redis-cli -p 6666 ZINTERSTORE dst 0 AGGREGATE SUM # same, after the restart
What did you expect to see?
An error reply. The read-only commands already reject numkeys 0 (ZDIFF 0 s answers
ERR value is out of range, must be positive, ZINTER 0 s answers ERR out of numeric range),
and Redis answers ERR at least 1 input key is needed for 'zdiffstore' command.
What did you see instead?
The server process dies and every client loses its connection:
Ooops! Apache Kvrocks version 2.17.0 (commit 185d4221) got signal: Segmentation fault (11)
#2 ComposeNamespaceKey(rocksdb::Slice const&, rocksdb::Slice const&, bool)
#3 redis::Database::AppendNamespacePrefix(rocksdb::Slice const&)
#4 redis::ZSet::RangeByScore(...)
#5 redis::ZSet::Diff(...)
#6 redis::ZSet::DiffStore(...)
#7 redis::CommandZDiffStore::Execute(...)
Anything Else?
Potential cause. CommandZDiffStore::Parse (src/commands/cmd_zset.cc:1524-1538) and
CommandZUnionStore::Parse (:1200-1216, which ZINTERSTORE inherits) accept numkeys 0 and leave
the key list empty. ZSet::Diff then reads keys[0] (src/types/redis_zset.cc:905) and
ZSet::Inter reads keys_weights[0] (:657).
Suggested fix. Reject numkeys below 1 in both parsers, as CommandZDiff::Parse (:1472) and
CommandZInter (:1127) already do.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- 主要言語
- C++
- スター
- 4.5k
- フォーク
- 689
- 平均マージ
- 1日 23時間
- マージ済み PR(30日)
- 36
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/kvrocks のほかの issue
-
HSETEXPIRE with an overflowing TTL returns OK and deletes the whole hash対応中かも @anubhavgupta121 が 22 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
LPOS with COUNT replies with bulk strings instead of integers対応中かも @DeviousDrops が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 35/100
メンテナーはふだん 1 日以内に返信
-
Add docker build for alpine 3.24対応中かも @aleksraiden が 1 日前に担当しました。 オープンenhancement
apache/kvrocks#3768 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
`JSON.STRAPPEND` with non JSON value crashes the server対応中かも @ggyuchive が 2 日前に担当しました。 オープンbug
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
apache/kvrocks#3765 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
A blocked client that is woken but loses the element to another client is never woken again対応中かも @ggyuchive が 3 日前に担当しました。 オープンbug
難易度 4/5 1〜2日 初心者へのやさしさ 55/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 69/100
-
area:qmc bug
難易度 2/5 1〜3時間 初心者へのやさしさ 69/100
メンテナーはふだん 3 日以内に返信
-
bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
ASGC-Game-Jam/asgc-gamejam-2026#563 ·
メンテナーはふだん 1 日以内に返信
-
area/ysql kind/bug priority/medium status/awaiting-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
yugabyte/yugabyte-db#37523 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100