中途半端な正規表現で検索すると応答なしになる
-
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcd
という文字列を含む文章で、正規表現にチェックを入れ
a(b|)+d
で検索すると Mery が応答なしになってしまいます。
上記文字列の b の部分が長いほど応答なしになりやすく、短いと応答なしにならない場合がありますが、その後操作が重くなることがあります。
試したところ以下でも同様に応答なしになりました。
a(b|)*d
a(b|)+?d
a(b|)*?d意図的に a(b|)+d で検索するケースはないかもしれませんが、本来 a(b|c)+d とするところ誤って検索した場合や、インクリメンタルサーチで偶然この形になるといったケースが考えられます。
■ 検証環境
OS: Windows 10 1909 64bit (OSビルド 18363.592)
CPU: Intel Core i5-6200U
メモリ: 8GB
グラフィック: Intel HD Graphics 520
Mery: 2.6.7 と 2.8.8 (共に 64 ビット版で設定は初期状態)| ucky | 返信 -
ご報告ありがとうございます。
頂いた手順で現象を再現することができました。
調査してみましたところ、どうも正規表現ライブラリの鬼雲がフリーズしているようです。
他のテキストエディターでも試してみましたが…
・秀〇さん + hmonig.dll → 応答なし
・E〇Editor さん (設定で Onigmo 使用) → 応答なし
・サク〇エディタさん + bregonig.dll → 応答なし
・gP〇d さん + bregonig.dll → 応答なしということで、鬼雲を使うといずれもフリーズしてしまうようです。
Mery を使用せず、鬼雲を利用するだけの単純なプログラムでも、問題の正規表現を鬼雲の API に渡してやるだけでフリーズして制御が戻ってきませんので、鬼雲を利用するアプリ側からは対策の余地がなさそうです。
| Kuro | 返信 -
> Mery を使用せず、鬼雲を利用するだけの単純なプログラムでも、問題の正規表現を鬼雲の API に渡してやるだけでフリーズして制御が戻ってきませんので、鬼雲を利用するアプリ側からは対策の余地がなさそうです。
承知しました。
お忙しいところ調査していただきありがとうございました。
| ucky | 返信