windowPostMessageTransport throws when an unrelated postMessage has null data
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 74/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- typescript
調査の方向性
getWindowPostMessageTransport の実装を見つけ、connect() によってインストールされるメッセージリスナーを調査します。data が null または undefined である message event で問題を再現し、その後、オブジェクトではないペイロードが無視される一方で、既存の target、stream、origin、および MetaMask メッセージの処理が変更されないことを確認します。
索引モデルが issue の本文から書いたものです。
説明
What happened?
getWindowPostMessageTransport().connect() installs a global window.addEventListener('message', ...) listener. That listener receives every postMessage on the page, including messages sent by unrelated scripts or iframes.
The current listener destructures event.data before validating it:
const { target, data } = event.data;
If another page script sends a valid postMessage with null or undefined data, this throws a TypeError before the listener can ignore the unrelated message.
Minimal reproduction
After connect() has registered the message listener, dispatching a message shaped like this is enough to trigger the crash:
messageHandler({
data: null,
origin: location.origin,
} as MessageEvent);
Expected: unrelated/non-object message payloads are ignored, the same as wrong target/stream/origin messages.
Actual: the listener throws while destructuring event.data.
Suggested fix
Add a small guard before destructuring:
if (!event.data || typeof event.data !== 'object') {
return;
}
This keeps the existing MetaMask message handling unchanged while preventing unrelated page messages from surfacing avoidable listener errors.
- 主要言語
- TypeScript
- スター
- 1
- フォーク
- 4
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 84/100
answerLoops/answerLoops#345 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
siyuan-note/siyuan#20313 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
LanternOps/breeze#8254 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 82/100
gofish-graphics/gofish-graphics#1084 ·
メンテナーはふだん 1 日以内に返信