タグ: 正規表現
- 作成者投稿
- 2024年11月13日 11:59 pm #32060yasuji参加者
江村様
いつもお世話になっております。
yasujiです。1.4 GBのテキストファイル(合計 61689810 行)を開いて[正規表現で検索する追加行数(L)]を最大値に設定して、正規表現検索を行うとOnigmo 正規表現エンジンの内部でアクセス違反例外、クラッシュまたは応答なしになるバグが発生する。
設定する最大値は下記の通り2通りあり、それぞれ設定値の保存後に設定値の再表示で設定される数値が異なる。
(L1)9999999999 ==> 1410065407
(L2)99999999999 ==> 1215752191上記不具合の発生の再現手順は下記の通りです。
〔対象〕
v24.4.1 (64bit)〔使用環境〕
CPU : AMD Ryzen 9 3900X 12-Core Processor 3.80 GHz
RAM : 128 GB
OS : Windows 10 Pro 64bit 22H2 build 19045.5011
MB : ASUS PRIME X570-PRO〔再現手順〕
0.事前準備
WikipediaのDatabase backup dumpsのファイルをダウンロードして、それぞれ展開する。展開のファイルサイズは、非常に大きいためディスクの空き容量に注意すること。
enwiki-20241020-all-titles.gz (file size: gz 339.3 MB, txt 1.4 GB)なお、上記のファイルは、2024/11/13時点ではダウンロードできるが、3カ月程度でローテーションするため、最新の日付のURLからダウンロードする必要がある。
1.EmEditor 64bit ポータブル版を初期状態で起動
zipファイルから展開して、起動する。
初回のエディション選択は、Professionalを選択する。2.ファイルを開く
enwiki-20241020-all-titlesを開く。開く処理が終わるまで待つ。
3.検索を開いて、下記の通り設定する
[検索する文字列]
\R
〔チェックボックス〕
[大文字と小文字を区別する(C)]:ON
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:Onigmo.Perl
[正規表現で検索する追加行数(L)]:1215752191問題が発生する[正規表現で検索する追加行数(L)]は、下記の通り。それぞれ設定して次のステップに進む。
(L1)1410065407
(L2)1215752191
※上記の数値は[正規表現で検索する追加行数(L)]を下記の通りに設定して[OK]して再度[高度]を開くことで得られる。
9999999999 ==> 1410065407
99999999999 ==> 12157521914.[次を検索]を実行する
5.結果の確認
[正規表現エンジン(G)]にOnigmo.Perlを設定した場合:
(L1)を設定した場合:
クラッシュレポート画面が表示されて、その後に強制終了になる。(L2)を設定した場合:
[次を検索]を押下した直後に下記の内容で[OK]または[キャンセル]ボタンのあるメッセージボックスが表示される。
「Onigmo 正規表現エンジンの内部でアクセス違反例外が発生しました。この問題を回避するには、正規表現の簡素化を試みてください。[OK]をクリックすると、無視して継続します。[キャンセル]をクリックすると、異常終了します。」
[OK]を押下すると、検索処理が続行されるがすぐに応答なしになる。
[キャンセル]を押下すると、クラッシュレポート画面が表示されて、その後に表示される画面から[EmEditorを終了]ボタンを押下して終了になる。[正規表現エンジン(G)]にBoost.Regexを設定した場合:
(L1)を設定した場合:
クラッシュレポート画面が表示されて、その後に強制終了になる。(L2)を設定した場合:
検索進捗ウィンドウが表示されず、検索ウィンドウが応答なしになり、回復する見込みがないため強制終了するしかなくなる。[正規表現エンジン(G)]が Onigmo.Perl, Boost.Regex 以外の検索エンジンについては試していない。
2024年11月16日 10:52 am #32069Yutaka Emuraキーマスターいつもお世話になっております。江村です。
既に、こちらでは修正いたしました。次に公開されるバージョンでは修正されています。
よろしくお願いいたします。
2024年11月17日 12:42 am #32075yasuji参加者江村様
いつもお世話になっております。
yasujiです。承知しました。次の新バージョンが公開されたときに確認します。
よろしくお願いします。
2024年11月25日 10:58 pm #32102yasuji参加者江村様
いつもお世話になっております。
yasujiです。v24.4.902 (64bit)について、この不具合の修正確認を行った結果、下記の通り不具合が発生しております。
再度、修正対応をお願いします。〔確認結果〕
[正規表現エンジン(G)]にOnigmo.Perlを設定した場合:
(L1)または(L2)を設定した場合:
[次を検索]を押下した直後に下記の内容で[OK]または[キャンセル]ボタンのあるメッセージボックスが表示される。
「Onigmo 正規表現エンジンの内部でアクセス違反例外が発生しました。この問題を回避するには、正規表現の簡素化を試みてください。[OK]をクリックすると、無視して継続します。[キャンセル]をクリックすると、異常終了します。」
[OK]を押下すると、検索処理が続行されるがすぐに応答なしになる。
[キャンセル]を押下すると、クラッシュレポート画面が表示されて、その後に表示される画面から[EmEditorを終了]ボタンを押下して終了になる。[正規表現エンジン(G)]にBoost.Regexを設定した場合:
(L1)または(L2)を設定した場合:
検索進捗ウィンドウが表示されず、検索ウィンドウが応答なしになり、回復する見込みがないため強制終了するしかなくなる。よろしくお願いします。
2024年11月26日 2:33 am #32107Yutaka Emuraキーマスターいつもお世話になっております。江村です。
この問題は、正規表現エンジンの内部処理にかなりの時間がかかっていることが原因と考えられます。もともと、[正規表現で検索する追加行数(L)]にはそれほど大きな値を想定しておりませんので、より小さな値を指定することをお勧めいたします。
何かご意見やご質問がありましたら、どうぞ私宛にメールでご連絡ください。
よろしくお願いいたします。
- 作成者投稿
- このトピックに返信するにはログインしてください。