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

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

もずはっく日記(2014年7月)

2014年7月31日

Bug-org 1043182 IMEContentObserver::CharacterDataChanged() doesn't convert new lines in replaced and inserted text to native new lines
初回投稿日時: 2014年07月31日23時39分16秒
カテゴリ: Mozilla Core Mozilla34 TSF Windows バグ修正
SNS: (list)

台湾でメジャーらしい、ChangJieというIMEがあるのですが、<textarea>要素内で改行を挿入直後に、そのまま入力すると、前の行の行頭に入力されてしまうというバグです。何故かBug-org 496360を修正するパッチのうちのいくつかを適用したら再現するようになりました。

テキストノードの一部が変更された場合、IMEContentObserverのmutation observerの、CharacterDataChanged()が呼び出されるのですが、この際に、変更によって削除される範囲と、追加されるテキストの長さを計算する時に、改行文字をCRLFの二文字として計算していなかったことでした。

これにより、改行を挿入した際に、本来なら二文字追加されていると、TSFに通知しないといけないところを、一文字だけ追加された、と通知していたわけです。しかし、選択位置を調べて見ると、それとはまた違った、一文字分、後ろのオフセットが返されるという矛盾した状態になっていました。

TSFに変更箇所を通知する際に、きちんと、改行文字をWindowsでのみ二文字としてカウントするように修正しています。

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

bug-org 1043182を含むエントリ