Report malformed remote protocol data instead of defaulting to zero
メンテナーはふだん 3 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- cpp
調査の方向性
Start by reading the dropped implementation in commit f7a1961 and the exception boundaries around ExecuteAdapterAndWait, NotifyStopped, HandleSpontaneousAdapterStop, WorkerThreadMain, and InvokeBackendCommand. Inspect esrevenadapter.cpp, PacketToUnorderedMap, and GdbMiAdapter::ReadMemory for the listed parsing problems. Done means malformed data is reported with its field and value, sessions tear down fully, stop-channel state is exception-safe, and unrecognized stop-reply fields are ignored.
索引モデルが issue の本文から書いたものです。
説明
Follow-up to #1164 / #1166.
#1166 stops the crash by parsing remote stub data with a non-throwing helper that returns 0 on malformed input. That means a corrupt packet silently becomes a valid-looking answer — a bad thread id turns into thread 0, and we then show the user the wrong thread's registers with no indication anything is wrong. Accepted deliberately to keep the fix local during feature freeze.
The session should instead end deliberately, reporting the offending field and data. An attempt at that was dropped from #1166 (commit f7a1961); review of it showed what a real implementation needs:
- Wider catch boundary than
ExecuteAdapterAndWait.NotifyStoppedruns after it returns and refreshes caches;HandleSpontaneousAdapterStophas no boundary;WorkerThreadMainruns tasks bare, so an escape isstd::terminate;InvokeBackendCommandreaches monitor-command decoding directly from the API/FFI. - Real transport teardown. A synthetic
TargetExitedonly updates BN-side state. The teardown lives in the adapter (m_socket->Kill(),delete m_rspConnector,InvalidateCache). Alsom_adapteris never reset on any session end today, soCreateDebugAdapterreuses it. - RAII on the stop channel. An exception between setting and clearing
m_inAdapterWaitleaves a stale pending stop that swallows later adapter events. - Ignore unrecognized stop-reply fields.
PacketToUnorderedMapparses everykey:valueas hex, but the spec requires unknown pairs be ignored and defines non-hex values we advertise support for (replaylog:begin,exec:<hex pathname>,fork/vforkpPID.TID). Parsing only the keys we consume is both spec-correct and smaller.
Outstanding regardless of the exception work:
esrevenadapter.cppstill uses rawstd::stoull(:1797,:2249,:2251) andstd::stoi(:2309) — the call sites #1164 describes.PacketToUnorderedMap:T05thread:1:garbage;splits into three tokens and falls through topacket_map[key] = 0; values are truncated to 16 chars before validation, so trailing garbage disappears.GdbMiAdapter::ReadMemorychecksfrom_chars().ecbut not full consumption, so"aZ"parses as0x0a; odd-length replies truncate; hard errors return an all-zero buffer indistinguishable from valid memory.
- 主要言語
- C++
- スター
- 334
- フォーク
- 33
- 平均マージ
- 5日 13時間
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Vector35/debugger のほかの issue
-
bug Effort: Trivial
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 3 日以内に返信
-
bug Effort: Trivial Impact: Low
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 3 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
メンテナーはふだん 3 日以内に返信
-
Effort: Trivial enhancement UI
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
Vector35/debugger#1148 · コメント 1 件 ·
メンテナーはふだん 3 日以内に返信
Vector35/debugger の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
gavinlouuu-kpt/mib-studio-qt#517 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
EchoTools/nevr-runtime#116 ·
メンテナーはふだん 1 日以内に返信
-
code-quality libc++
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
llvm/llvm-project#229284 ·
メンテナーはふだん 1 日以内に返信
-
test-issue
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
llvm/offload-test-suite#1557 ·
メンテナーはふだん 1 日以内に返信