Bug-org 1117087 crash in nsEditor::EnsureComposition(mozilla::WidgetGUIEvent*)
初回投稿日時: 2015年06月06日13時19分37秒
最終更新日時: 2015年06月06日13時31分53秒
カテゴリ: GTK Mozilla Core Mozilla40 バグ修正
SNS:
Tweet (list)
ATOK X3に対応した際のregressionで、Facebookのコメント入力欄が空の場合に、IMEで未確定文字列を入力するとクラッシュするというバグです。
Facebookのコメント入力欄はcontenteditable
で作成されていて、placeholder
のような入力時に自動的に消える文字は、通常のテキストノードです。
このため、未確定文字列を挿入しようとした際に、このテキストノードがFacebookにより削除され、内部ではselection changeが発生します。selection changeが発生するとGTKアプリでは、gtk_im_context_reset()
を呼び出すことになっていますが、iBusは、preedit_start
シグナルの送信中にgtk_im_context_reset()
が呼び出されても未確定文字列を削除しない、バグっぽい動作を行います。しかし、Gecko内部では空文字列ですでに確定していますので、NS_COMPOSITION_START
が発生していない状態でNS_COMPOSITION_CHANGE
イベントが発生し、あり得ない状況としてGeckoはMOZ_CRASH()
を呼び出して安全にクラッシュしていました。
どちらにせよ、preedit_start
シグナルの送信中に未確定文字列がキャンセルされるのはユーザの意図する状況とは言えませんので、preedit_start
シグナルの送信中にselection changeが発生してもひとまず無視するように修正しました。ただし、IMEを混乱させないように、未確定文字列の開始位置はselection changeが発生した段階で補正するようにはしています。
Web開発者の方は、compsoitionstart
イベントの発生時に、選択位置や、コンテンツの内容を書き換えるのはやめてください。おそらく、様々な問題が潜んでいると思います。