Skip to content

fix(crane_robot_receiver): フィードバック受信のチェックサム検証を有効化#1396

Open
HansRobo wants to merge 1 commit into
developfrom
fix/receiver-checksum-validation
Open

fix(crane_robot_receiver): フィードバック受信のチェックサム検証を有効化#1396
HansRobo wants to merge 1 commit into
developfrom
fix/receiver-checksum-validation

Conversation

@HansRobo

Copy link
Copy Markdown
Member

概要

crane_robot_receiver のフィードバック受信パイプラインにおいて、実装済みでありながら呼び出されていなかったチェックサム検証を有効化します。これにより、ペイロードが破損したパケットを正しく不正パケットとして弾けるようになります。

問題

robot_receiver_node.cpponReceive は、受信パケットに対してサイズ検証と SYNC バイト検証のみを行っており、protocol::validatePacket / protocol::computeChecksum といった実装済みのチェックサム検証 API を一切呼び出していませんでした。

その結果、SYNC バイトは一致するもののペイロードが破損したパケットも valid として受理され、誤ったフィードバックデータが下流へ流れていました。また、checksum_error_count_ がインクリメントされないため、診断値が常に 0 となり、チェックサム異常を検知できない状態でした。

原因

受信パイプライン (onReceive) にチェックサム検証ステップが組み込まれておらず、SYNC チェック通過後ただちに parseBuffer へ進んでいたためです。

修正内容

onReceive の SYNC バイト検証直後に、チェックサム検証ステップを追加しました。

  • protocol::offset::CHECKSUM(オフセット 2)に格納された受信チェックサム値を protocol::readRawByte で取得。
  • protocol::computeChecksumCOUNTER バイト以降から PACKET_SIZE までの総和の下位 8 bit)と比較。
  • 不一致の場合は ++checksum_error_count_ および ++invalid_packet_count_ を行い、parseBuffer / valid_packet_count_ をスキップして return

サイズ検証が既に通過しているため、computeChecksum の走査範囲はバッファ境界内に収まります。修正は当該検証ロジックの追加のみに限定しています。

検証

cwm の独立オーバーレイ worktree 上で、対象パッケージ crane_robot_receiver を colcon build(--no-rdeps)でコンパイルし、ビルドが正常完了することを確認しました("Build complete."、ビルドエラーなし)。

レビュー観点

  • チェックサムのオフセット(offset::CHECKSUM = 2)と算出方法(computeChecksum: COUNTER 以降の総和下位 8 bit)の使い方が protocol API と整合しているか。
  • 不一致時に checksum_error_count_invalid_packet_count_ の両方をインクリメントし、valid_packet_count_ / parseBuffer をスキップしているか。
  • 既存の SYNC / サイズ検証の流れと一貫しているか。

本PRはソースコード監査ワークフローで検出・敵対的検証されたバグに対する単一修正です。

@HansRobo

HansRobo commented Jun 7, 2026

Copy link
Copy Markdown
Member Author

チェックサムの計算方法が多分違う

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant