Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Report malformed remote protocol data instead of defaulting to zero

Đang mở
#1,176 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 3 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
cpp

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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. NotifyStopped runs after it returns and refreshes caches; HandleSpontaneousAdapterStop has no boundary; WorkerThreadMain runs tasks bare, so an escape is std::terminate; InvokeBackendCommand reaches monitor-command decoding directly from the API/FFI.
  • Real transport teardown. A synthetic TargetExited only updates BN-side state. The teardown lives in the adapter (m_socket->Kill(), delete m_rspConnector, InvalidateCache). Also m_adapter is never reset on any session end today, so CreateDebugAdapter reuses it.
  • RAII on the stop channel. An exception between setting and clearing m_inAdapterWait leaves a stale pending stop that swallows later adapter events.
  • Ignore unrecognized stop-reply fields. PacketToUnorderedMap parses every key:value as hex, but the spec requires unknown pairs be ignored and defines non-hex values we advertise support for (replaylog:begin, exec:<hex pathname>, fork/vfork pPID.TID). Parsing only the keys we consume is both spec-correct and smaller.

Outstanding regardless of the exception work:

  • esrevenadapter.cpp still uses raw std::stoull (:1797, :2249, :2251) and std::stoi (:2309) — the call sites #1164 describes.
  • PacketToUnorderedMap: T05thread:1:garbage; splits into three tokens and falls through to packet_map[key] = 0; values are truncated to 16 chars before validation, so trailing garbage disappears.
  • GdbMiAdapter::ReadMemory checks from_chars().ec but not full consumption, so "aZ" parses as 0x0a; odd-length replies truncate; hard errors return an all-zero buffer indistinguishable from valid memory.
Ngôn ngữ chính
C++
Star
334
Fork
33
Merge trung bình
5 ngày 13 giờ
Pull request đã merge (30 ngày)
1

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Vector35/debugger

Tất cả issue của Vector35/debugger

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.