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

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

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

2011年5月19日

Bug 6791 maxlengthが設定されているinput要素で、一文字も追加できない状況でIMEで文字を入力するとmaxlength値を超えた文字数の文字が入力できる
初回投稿日時: 2011年05月19日19時16分52秒
カテゴリ: HTML Mozilla Core Mozilla6 バグ修正
SNS: (list)

久しぶりにBugzilla-jpに報告されたバグの修正です。maxlengthが指定されている<input>要素で既に限界まで文字が入力されている状態で、IMEで文字列を入力して確定すると、未確定文字列がそのまま残り、valueプロパティ値には含まれてしまっているため、制限文字数を超えて入力できてしまう、というバグです。

原因は、maxlengthに到達している段階で文字を入力しようとすると、そのまま処理を中断するように修正されていたことでした。

未確定文字列は内部では独立したテキストノードとして挿入されていて、さらにこのテキストノードを内部処理用の特殊な選択範囲で選択していることにしています。今までは文字列がまったく入力できない状態でも、この未確定文字列を掃除する処理が走っていたのですが、前述の修正でこれまでスキップされるようになっていました。

IMEによる文字列の挿入時にはショートカットしないように修正して解決しています。

ちなみに、今回のように、ブラウザのバグで制限文字数を超えた値がサーバに送信されてしまう可能性もありますが、意図的な攻撃でそうなる可能性もありますので、Webアプリの開発者の方は必ず値の妥当性は検査するのを忘れないようにしてください。

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

bug 6791を含むエントリ