この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2013年1月)

2013年1月23日

Bug-org 825924 Form autocomplete does not properly reset
初回投稿日時: 2013年01月23日17時16分39秒
カテゴリ: Events Firefox Mozilla Core Mozilla21 バグ修正
SNS: (list)

<input>等に何文字か入力し、オートコンプリートの候補が絞られた後で、入力内容を全て選択し、コンテキストメニューからそれを切り取った後、再度入力を開始しても、候補が絞り込まれたままになっている、というバグです。Aliceさんのおかげで、regressionの原因がBug-org 668606の修正にあることが分かりました。

Bug-org 668606の修正では、エディタの種類に関係無く、inputイベントを発生させるために、nsEditorが内容の変更があった際にイベントを発生させるように修正しました。この際に、エディタのインターフェースから属性を一つ削除してシンプルにできる様になったのですが、この修正にミスがありました。

削除された属性は、inputイベントをtrustedイベントとして生成するかどうかに関わるもので、セキュリティのために、イベントや、コマンドのハンドリングを開始した際にスタックに、HandlingTrustedActionクラスのインスタンスを生成し、これが、nsEditorに、trustedなinputイベントを生成すべきかどうかを設定していました。この、クラスの生成に漏れがあった、というのがこのバグの直接の原因です。

しかし、別件でD3Eの仕様を読んでいる時に気になっていたのですが、例え、untrustedなイベントが原因でエディタに変更があったとしても、それは、trustedなinputイベントを常に生成すべきなのではないか、逆に言うと、document.createEvent()で生成しない限り、untrustedなイベントにはなるべきではないのではないかという疑問がありました。

この機会にそれをSmaugに確認してみたところ、やはり、nsEditorは常にtrustedなinputイベントを生成するべきだという意見でしたので、HandlingTrustedActionクラスを廃止し、常に、trustedなinputイベントを生成するように修正しました。

これにより、このバグが再現しないようになっています。

既に、Bug-org 698949の修正により、untrustedなキーイベントでエディタの内容が変更されて、オートコンプリート履歴をWebページのスクリプトで読まれてしまうバグは完全消滅していますので、この修正による、セキュリティ的な問題は既に無いと考えています。

ただし、inputイベントisTrusted属性を監視しているWebアプリでは、なんらかの挙動の変化が発生する可能性があるので注意してください。

関連するかもしれないエントリ

bug-org 825924を含むエントリ