タグ: 正規表現
- 作成者投稿
- 2024年11月6日 11:57 pm #32055yasuji参加者
江村様
いつもお世話になっております。
yasujiです。2.3GB以上のXMLファイルを開いて[正規表現で検索する追加行数(L)]を合計行数に設定して、下記の正規表現検索を実行するとその直後にクラッシュするクラッシュバグが発生する。回避する方法がない。
(R1)
(?:\x{0D}\x{0A}|[\x{0A}-\x{0D}\x{85}\x{2028}\x{2029}])
(R2)
\R
(R3)
.+
上記不具合の発生の再現手順は下記の通りです。
〔対象〕
v24.4.1 (64bit)
v24.4.901 (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のファイルをダウンロードして、それぞれ展開する。展開のファイルサイズは、非常に大きいためディスクの空き容量に注意すること。
jawiki-20241020-abstract.xml.gz (file size: gz 260.8 MB, xml 2.3GB)
jawiki-20241020-pages-meta-current.xml.bz2 (file size: gz 4.7 GB, xml 21.9GB)なお、上記のファイルは、2024/11/06時点ではダウンロードできるが、3カ月程度でローテーションするため、最新の日付のURLからダウンロードする必要がある。
1.EmEditor 64bit ポータブル版を初期状態で起動
zipファイルから展開して、起動する。
初回のエディション選択は、Professionalを選択する。2.ファイルを開く
下記の(F1)、(F2)のファイルについて、3.以降の手順を実行する。
(F1)0.のjawiki-20241020-abstract.xmlを開く。
(F2)0.のjawiki-20241020-pages-meta-current.xmlを開く。開く処理が終わるまで待つ。
3.[検索]を開きオプションを設定
〔チェックボックス〕
[大文字と小文字を区別する(C)]:ON
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:Onigmo.Perl
[正規表現で検索する追加行数(L)]:20871119[正規表現で検索する追加行数(L)]は、開いているファイルの合計行数を設定する。
ファイルごとの合計行数は下記の通り。
(F1)20871119
(F2)3070993094.検索文字列の設定
[検索する文字列]は、下記のどちらかを入力する。
(R1)
(?:\x{0D}\x{0A}|[\x{0A}-\x{0D}\x{85}\x{2028}\x{2029}])
(R2)
\R
5.[次を検索]を実行する
6.結果の確認
(R1)、(R2)のどちらも[次を検索]の押下直後にクラッシュし、クラッシュレポートが表示され強制終了になる。
3.の[正規表現エンジン(G)]が、 Boost.Regex の場合でも同じ事象が発生する((F1)のファイルで確認済み)。このクラッシュバグは、下記の条件2つを満たす場合に発生確率100%で[次を検索]の押下直後に発生する。
(1)開くテキストファイルサイズが、2.3GB以上。
(2)[正規表現で検索する追加行数(L)]が、開いているテキストファイルの合計行数(ステータスバー右下表示)以上を設定(右下表示)[正規表現エンジン(G)]が Onigmo.Perl, Boost.Regex 以外の検索エンジンについては試していない。
スレッド数を最小にすることで改善すると考えて、メインメニュー [ツール] -> [カスタマイズ] -> [高度]を開き、[スレッド数(N)]を 初期値(自動(24)) から 1 へ変更したが同様に発生する。
7.検索を開いて、下記の通り設定する
〔チェックボックス〕
[大文字と小文字を区別する(C)]:ON
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[正規表現「.」が改行コードに一致することができる(E)]:ON
[「^」と「$」が選択の最初と最後に一致することができる(B)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:Onigmo.Perl
[正規表現で検索する追加行数(L)]:20871119[正規表現で検索する追加行数(L)]は、開いているファイルの合計行数を設定する。
ファイルごとの合計行数は下記の通り。
(F1)20871119
(F2)3070993098.検索文字列の設定
[検索する文字列]は、下記のどちらかを入力する。
(R3)
.+
9.[次を検索]を実行する
10.結果の確認
[次を検索]の押下直後にクラッシュし、クラッシュレポートが表示され強制終了になる。
7.の[正規表現エンジン(G)]が、 Boost.Regex の場合でも同じ事象が発生する((F1)のファイルで確認済み)。このクラッシュバグは、下記の条件2つを満たす場合に発生確率100%で[次を検索]の押下直後に発生する。
(1)開くテキストファイルサイズが、2.3GB以上。
(2)[正規表現で検索する追加行数(L)]が、開いているテキストファイルの合計行数(ステータスバー右下表示)以上を設定(右下表示)[正規表現エンジン(G)]が Onigmo.Perl, Boost.Regex 以外の検索エンジンについては試していない。
スレッド数を最小にすることで改善すると考えて、メインメニュー [ツール] -> [カスタマイズ] -> [高度]を開き、[スレッド数(N)]を 初期値(自動(24)) から 1 へ変更したが同様に発生する。
2024年11月16日 8:12 am #32066Yutaka Emuraキーマスターいつもお世話になっております。江村です。
既に、こちらでは修正いたしました。次に公開されるバージョンでは修正されています。
よろしくお願いいたします。
2024年11月17日 12:42 am #32077yasuji参加者江村様
いつもお世話になっております。
yasujiです。承知しました。次の新バージョンが公開されたときに確認します。
よろしくお願いします。
2024年11月25日 10:51 pm #32101yasuji参加者江村様
いつもお世話になっております。
yasujiです。v24.4.902 (64bit)について、この不具合の修正確認を行った結果、下記の通り新しい不具合が発生しております。
再度、修正対応をお願いします。〔確認結果〕
(F1)0.のjawiki-20241020-abstract.xml、(F2)0.のjawiki-20241020-pages-meta-current.xmlおよび(R1)、(R2)の組合せで、Onigmo.Perl, Boost.Regexのどちらでも、9.の実行直後に検索ウィンドウとEmEditor本体が「応答なし」になり、手動で強制終了する以外になくなります。よろしくお願いします。
2024年11月26日 2:36 am #32109Yutaka Emuraキーマスターいつもお世話になっております。江村です。
これは、正規表現エンジンの内部での処理に非常に大きな時間を要しているためだと考えられます。
そもそも、[正規表現で検索する追加行数(L)]には、それほど大きな値を想定していません。もっと小さな値を指定することを推奨します。何か追加でコメントがありましたら、本フォーラムではなく、私までメールをお送りください。
よろしくお願いいたします。
- 作成者投稿
- このトピックに返信するにはログインしてください。