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

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

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

2014年3月11日

Bug-org 981947 Use PeekMessage() instead of GetMessage() when we try removing found message with PeekMessage(PM_NOREMOVE)
初回投稿日時: 2014年03月11日12時28分37秒
カテゴリ: Mozilla Core Mozilla28 Mozilla29 Mozilla30 Windows バグ修正
SNS: (list)

mozilla::widget::NativeKey::RemoveFollowingCharMessage()は、WM_KEYDOWNメッセージのハンドリング中に呼び出され、生成されているWM_CHAR等をキューから取り除くメソッドなのですが、この最中に想定外のことがあると、テキスト入力はおかしくなるものの、バグ報告が来ないことが予想され、また、そうそう起きないであろうケースと踏んで、MOZ_CRASH()を利用して、クラッシュレポートで想定外のバグを調査できるようにしていました。

しかし、このクラッシュが予想外に大量に発生しているということで、対応を続けています。クラッシュレポートでも、有益なコメントが付けられているものはほとんど無いのですが、原因のひとつには、Doragon Naturally Speakingというソフトがあるようです。このアプリは、音声からキー入力イベントを生成しているようですが、どうもその生成が下手なようで、他のアプリでもうまく動かないものがあるというコメントも見られました。

このバグは、オリジナルであるBug-org 962140での取り扱いに限界が出たため、分割登録しなおした最初のバグです。

これまでは、PeekMessage()WM_*CHARを発見した場合、GetMessage()で見つけたメッセージを取得していましたが、PeekMessage()PM_REMOVEとセットで呼び出した場合の挙動の違いが事態をややこしくしている可能性がありましたので、PeekMessage()PM_NOREMOVEを利用して呼び出した後には、必ず、PeekMessage()PM_REMOVEを利用するようにしました。

また、実際にバグ修正のヒントとなるであろう、メッセージキューの情報を、MOZ_CRASH()を呼び出す直前に取得して、リポートにログを追加するようにしました。

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

bug-org 981947を含むエントリ