Bug-org 998188 ContentEventHandler::OnQueryCaretRect() converts native text offset with wrong node
初回投稿日時: 2014年04月30日23時39分35秒
最終更新日時: 2014年04月30日23時40分36秒
カテゴリ: Mozilla Core Mozilla31 バグ修正
SNS:
Tweet (list)
デバッグビルドでTwitter等、contenteditable
等で作成されたリッチテキストエディタでIMEを使っていると、mozilla::ContentEventHandler
内でオフセットの異常を検知して強制終了するというバグです。
このバグの原因は、Metro版Firefoxのchromeのコードから、nsIDOMWindowUtils.sendQueryContentEvent()
を呼び出す際に、JS上で取得した文字列のオフセットを利用して、キャレットの位置を取得できるようにするために、アドホックな修正を入れてたことで混入していました。
ただし、デバッグビルドで発生する異常検知も、エディタ内のテキストノードが複数存在する場合にのみ検知できていたので、これまで、バグの混入に誰も気付いていなかったという感じです。IMEを利用した場合、未確定文字列が独立したテキストノードとして挿入されているので、この条件が整っていたわけです。
今回の修正では、まず、アドホックな修正そのものを取り除き、nsIDOMWindowUtils.sendQueryContentEvent()
と、nsIDOMWindowUtils.sendSelectionSetEvent()
の引数にフラグを追加し、指定するオフセットや、長さ、前者の戻り値のオフセット、長さ、文字列それぞれが、改行文字列が、JSで扱いやすい\n
のみXPモードと、ネイティブAPIとの通信に必要な、ネイティブの改行文字列、例えばWindowsでは\r\n
であるネイティブモードを選択可能にしました。
nsIDOMWindowUtils.sendSelectionSetEvent()
には注意が必要で、最後にあったboolean
の引数は削除され、新設したフラグの一つとなっています。互換性を失っていますが、これは、addons.mozilla.orgに登録されているアドオンのソースコードを横断検索し、利用しているアドオンが存在しないことを確認した上でのことです。ですので、自前のWebサイト等で配布されている、いわゆる、野良拡張や、企業等で組織内での利用のために作成されたアドオンがこのメソッドを利用していると、動作が壊れている可能性があることに注意してください(ただし、その引数がfalse
の場合は問題なく、利用していたとしても、false
であることが通常のはず)。