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

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

もずはっく日記(2011年2月)

2011年2月28日

Bug-org 636131 iBus freezes when it retrieves surrounding text and if the caret is at end of line (IA__gtk_im_context_set_surrounding: assertion `cursor_index >= 0 && cursor_index <= len' failed)
初回投稿日時: 2011年02月28日23時00分16秒
最終更新日時: 2011年02月28日23時00分41秒
カテゴリ: Mozilla Core バグ修正
SNS: (list)

今月唯一成功したバグ修正となりました。

タイ語等のためにサポートするようになった、gtkのIMのsurrounding textのサポートにバグがあり、iBusがハングアップしてしまう、というもので、ギリギリに報告されたものの、hard blockerに指定されたので修正することができました。

もともと、Windows用のコードを流用してそれをベースにしてLinuxで利用していましたが、キャレット位置より前にある改行を探すコードに問題がありました。Windowsでは改行コードはCRLFですから、キャレット位置から前方向にLFを検索するだけで良かったのですが、Linuxでは改行コードはLFですから、キャレット位置のひとつ前から検索しないと、キャレット位置の直後に存在するLFに引っかかることがありました。

このため、想定していたキャレット位置よりも前にあるはずのLFのオフセットが、キャレット位置よりも大きいという状況になり、unsigned int同士の引き算で、小さい数字から大きい数字を引く状況になり、その結果の大きな数字を元にiBusがメモリ上のあらぬアドレスを参照しておかしくなっていました。

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

bug-org 636131を含むエントリ