hmonig.dllで特定の正規表現パターンでフNo.39708
fzok4234 さん 22/05/09 21:27
 
夜分恐れ入ります。fzok4234 です。


さて、hmonig.dll を用いて特定の正規表現パターンを検索すると、CPU の使用量が
100 % になって
検索を実行した秀丸エディタがフリーズする不具合がありました。

検索パターンは
 (?#hmonig)(?#lookbehind)(?u)(?>(?:)*+|)
で、「大文字小文字の区別」は有効で、「単語検索」は無効です。「動作環境」->
「検索」->「すべて検索」
->「ヒット候補の表示」の 3 つの項目を有効にしているため、検索ダイアログに入
力しただけで
該当のタブが直ちにフリーズしてしまいます。


また、この不具合を検証中に、検索履歴を消去できない問題も同時に見つかりました。

まず、予め「動作環境」->「プライバシー」で全ての履歴を終了させてから「新規作
成」コマンドで
「無題」のタブを開きます。このタブで検索ダイアログを開いて上記の検索パターン
を入力します。
すると、直ちにこのタブがフリーズするのでハングアップチェッカーからこのタブを
強制終了させます。
その後、改めて「新規作成」で「無題」のタブを開いて、この状態で「動作環境」->
「プライバシー」の
ページを開きます。

すると、検索履歴の消去ボタンがグレーアウトして履歴の消去が実行できない状態と
なっています。
ところが、この状態のまま検索ダイアログを開くと、先ほど入力した検索パターンが
入力済みとなっていて
再びこの「無題」タブもフリーズしてしまいます。


環境は、
 ・秀丸エディタ    : 9.15β4 Float x64
 ・hmonog.dll      : 0.8.7.0
 ・HmJreSelect.dll : 0.2.0
です。



[ ]
RE:39708 hmonig.dllで特定の正規表現パタNo.39711
秀丸担当 さん 22/05/10 10:52
 
このパターンで、確かに応答なし状態になることが確認できました。
正規表現DLL内で帰って来ない状態での対策は難しく、検索ダイアログでの入力では、
すみませんがヒット候補の表示などのオプションをOFFにしていただくしかないです。

以前から、かなり限定的なのですが、50000字を超えて時間がかるときは、右下にバ
ルーン表示して強制終了させるかの問い合わせをするような対策がありました。
V9.12以降では、追加でHmJre自身でも通知の対策や、秀丸エディタ本体では\g<>を含
む場合でもバルーン表示したりする対策がありました。
HmJreでない場合は、限定的ではなく常時チェックするようにするつもりだったので
すが、そうはなっていませんでした。常時チェックするようにしようと思います。
ただ中断して続行できるわけではないので、ハングアップチェッカーと大差はないか
もしれません。

履歴の消去については、おそらく[その他]→[動作環境]→[検索]→[検索ダイアログ]
で、前回の検索文字列を使うオプションになっているということかと思います。
プライバシーのボタンは、getsearchhist相当のものが空だと押せないようになって
いますが、このオプションの場合はsearchbuffer相当のものが検索ダイアログに出ま
す。
searchbuffer相当が空でない場合も押せるようにしようと思います。

[ ]
RE:39711 hmonig.dllで特定の正規表現パタNo.39713
fzok4234 さん 22/05/11 12:35
 
> HmJreでない場合は、限定的ではなく常時チェックするようにするつもりだったの
>ですが、そうは
> なっていませんでした。常時チェックするようにしようと思います。
> ただ中断して続行できるわけではないので、ハングアップチェッカーと大差はない
>かもしれません。

機能改善策の検討ありがとうございます。

一応、今回は検索ダイアログでの正規表現パターンの明示的入力で問題が発覚したた
め、問題を
引き起こすパターンが何であるのかを容易に知ることができました。

しかし現実の運用では、マクロ上で searchdown などを「大量に」呼び出したり、強
調表示の項目を
「大量に」登録するなど、一度に「多種多様」かつ「大量」のパターンを同時に実行
することが
ほとんどです。このようなときには正規表現 DLL をフリーズ / クラッシュさせる原
因となった
パターンを素早く特定することは、現状ではほとんど不可能となります。

そこで、正規表現 DLL のフリーズ / クラッシュ対策機能の改善に際して、
 1.  使用した正規表現 DLL 名。
 2.  問題を引き起こした正規表現パターン。
 3.  マクロ実行時や .hilight ファイル直接指定モード使用時など、外部ファイル
に記述した
     正規表現パターンが問題を引き起こした場合の、
       ・マクロや強調表示ファイルのファイルパス。
       ・問題の箇所の行番号。
をダンプファイルに出力するなどして確実に判別できるようにしていただければ、マ
クロや強調表示
ファイルのデバックはもちろん、正規表現 DLL の開発者への不具合報告も円滑に行
えるようになるため
大変助かります。どうかよろしくお願いいたします。




[ ]
RE:39713 hmonig.dllで特定の正規表現パタNo.39715
秀丸担当 さん 22/05/11 15:04
 
自分も何らかの問題があって調べるとき、デバッグで探すのに手間取ることがあるの
で、特定しやすいようにできたらいいと思います。
やってみないとわからないですが、調べることができるようにするには、パフォーマ
ンス面の考慮やリスクが少しあるかもしれないです。
別件でV9.15を近いうちに正式にしたいということもあるので、いったん正式にして、
その後検討しようと思います。

[ ]
RE:39711 hmonig.dllで特定の正規表現パタNo.39717
fzok4234 さん 22/05/14 12:02
 
> 履歴の消去については、おそらく[その他]→[動作環境]→[検索]→[検索ダイアロ
>グ]で、
> 前回の検索文字列を使うオプションになっているということかと思います。
> プライバシーのボタンは、getsearchhist相当のものが空だと押せないようになっ
>ていますが、
> このオプションの場合はsearchbuffer相当のものが検索ダイアログに出ます。
> searchbuffer相当が空でない場合も押せるようにしようと思います。

早速の対応ありがとうございます。9.15 正式版にて動作確認ができました。



[ ]