長い行を含む文章での検索No.03291
大森鉄工所 さん 99/05/17 21:18
 
こんにちは、みなさま。
ちょっと前に秀丸の異常動作を経験しましたので報告します。

1行の文字数が多くそれも同じ文字を多く含むと、検索で
ページ違反を起こし秀丸が強制終了されます。
例えば‘*’が連続し、行末が違う文字で終わる行で
‘*+$’や‘*+\n’を検索すると私の所では再現できます。

複数の秀丸を開いていても、1つのみが終了され、その後
作業を続けていくと大体の場合ブルー画面になります。

秀丸エディタの V.2.29を使用しています。
まだカラー化してないんです。(^^;


<<< sample.lzh for MS-DOS ( use ish & LHarc ) [ 19 lines ] >>>
!!3a!$gR!2"DRo=l^/?81v$pXTQ~!&"H[x[z5oCD}aKV8F;(!J!!!!!!!!!!!!!!!!!!!!!!!!U]%p
!!3a!$gR!2"DRo=l^/?81v$pXTQ~!&"H[x[z5oCD}aKV8F;(!J!!!!!!!!!!!!!!!!!!!!!!!!U]%p
!!3a!$gR!2"DRo=l^/?81v$pXTQ~!&"H[x[z5oCD}aKV8F;(!J!!!!!!!!!!!!!!!!!!!!!!!!U]%p
"?&!E:BbBl2'!!8+!>!!n3m/9^?3bi5d-:J%:YY<vY:R83I[-:!*qw^a9g+nP"|<n;[E&v!!pU+zA{
$S]J&v!K!!^@!)$nI,ZCJ;T!lJfZJ:-1xKm\IHctdI!qHJL{sB7x:;GxI7Ek;bQe34rpN>9Lj]mIbI
%;I!7j[fjZ:?QKB>/_UtbMB6i>-EDa,39^ia{s9@mCy%yP(-w5;rfHjTZ6yh}f{(uHzy'PK{fuBVGH
&_>0"&q!'~"{u$[BTzorf<k8P!xfH^"Bf{P43mEIqu4$G2%!"kgxeoN(]tLuwn"gTNJd9K37jLrF|d
';9UgbYL[<]X8}g{,pBF4!r*Yff[B$:+eL<U0sW&qodPvUuTgHAvetUK+J@T^fJ6o4+6ieF0YDZk</
(_PE]VlyI2P3xb)9}lg&{LwFh=|QKukL4/csVXx@fEGMD+&QvR>0[5wIR;SdO^x%e\Egyl%y<=na\k
)[(4vF@gB_Ialv*-v9Vyssm;Ou{:'36(]9sUBPO1h0s}Qk)kbVu[q^o^zW:;no(b79yhLrGymcpc5L
*GEV9-Bg*zU4?15*]%8y-aS(X!*W/%mhVcE}w)|An3G%=v5h<Enz3$VlW|Rgh?VM^s7L=bE^IEvFz2
+&B!\9JjkE_^sNh<J7UIYM;PD26+9~QasfV"}4$3Ex|6:OJc1l?X%S}fv0Xs;]-nML/x&f"w%fR&GY
,O;Ve)Xs>TqfI[F%/aU4QPOxJPRj?KJ]e-hR+R{ISPOjS/R"Fnt[BHd@{F00Tw(20aC'|;^qCET&n%
-GU]CPq\;cW&wXKqE7>_Sb6k[upz<xot}DY$cbAD-Z<d/q7)nby^%PWL^Ljh/0&;($iRU:WnA&843l
/WG0+75Z[DQ7I%gvq=Dk%ZU:0JNCH65P!KW-LK/fhRl<$5>',Hl4"fO7RqH<>"L9}YP%k>4}"8m~_u
079(W5^Hs^K/Kp_?95387XmM3:p]uak$,)bc{P==A*:>11nU)B!!!!!!!!!!!!!!!!!!!!!!!!?/%I
a7>RT(k^Jp,X23c7tB+RC89yPPX~HiiSzT$F-p>~HEfC<cQNVGGIgd|ToRqJkuu<<(_bRx2>!e"3g1
cC-b"TO|{^KKTS-9vxtomWC;nbgpG4ueq_au7I7o+!!2IwwR)tdNkYM5&+z-oIJTpjJ"2v/q>|nQ<w

[ ]
RE:03291 長い行を含む文章での検索No.03310
番頭++ さん 99/05/18 19:15
 
HIDEMARU のページ違反です。
モジュール : JRE32.DLL、アドレス : 0157:00e414dc
Registers:
EAX=004a8cf8 CS=0157 EIP=00e414dc EFLGS=00010206
EBX=004ee000 SS=015f ESP=005df020 EBP=004a8cf8
ECX=004ee000 DS=015f ESI=004a8cf9 FS=4697
EDX=004a8c81 ES=015f EDI=004ee001 GS=0000
Bytes at CS:EIP:
38 13 75 09 80 3f 00 75 ef 5f 5e 5b c3 40 80 38
Stack dump:
004ee000 004a8cf8 004a99cc 00e41510 004a8cf8 004ee000 004a23ac 00e43f0e
004a8cf8 004ee000 005df10c 004a8cf8 004a94fc 004a99cc 07ba0000 80700000

P.S.
ISH はここではありですか ???

[ ]
RE:03291 長い行を含む文章での検索No.03323
秀丸担当 さん 99/05/19 19:13
 
>1行の文字数が多くそれも同じ文字を多く含むと、検索で
>ページ違反を起こし秀丸が強制終了されます。
>例えば‘*’が連続し、行末が違う文字で終わる行で
>‘*+$’や‘*+\n’を検索すると私の所では再現できます。

「もっと簡単にしてください」のメッセージは出ましたが、
死ぬことはありませんでした。
添付のファイルを試してみました。
なぜでしょう。番頭++さんのところでは再現するのでしょうか。

[ ]
RE:03323 長い行を含む文章での検索No.03327
番頭++ さん 99/05/19 19:31
 
>「もっと簡単にしてください」のメッセージは出ましたが、
>死ぬことはありませんでした。
>添付のファイルを試してみました。

普通はそうなります。
死ぬことを再現することは、投稿されたデータでは出来ませんでした。

>なぜでしょう。番頭++さんのところでは再現するのでしょうか。

*の数を変えると、一度だけ死にました。
それは、うちの環境では、JRE32 で死んでいるでしょう。
投稿されたデータとは異なっています。

[ ]
RE:03327 長い行を含む文章での検索No.03332
番頭++ さん 99/05/20 11:01
 
//  Windows 95 OSR 2.0
//*1    a1.mac  Ver. 3.01   これで再現しませんか ???
    newfile;    config "w80";
    insert "T";
    #i = 200;
    while( #i ){
        insert "*";    #i = #i -1;
    }
    insert "E\n";
    selectall;  copy;   paste;  paste;
    gofiletop;
    searchdown "*+$", regular;
//  searchdown "*+\\n", regular;
    gofileend;
    findup;
    up; findup; //  これを数回繰り返す、そしてファイルを閉じると死にます。
endmacro;

//  正規表現の $ が論理行末になるでしょう ???
//  これが、正しい再現マクロなのか、自信はありません !!!

[ ]
RE:03310 長い行を含む文章での検索No.03339
大森鉄工所 さん 99/05/21 07:13
 
追試ありがとうございます。

> ISH はここではありですか ???
どうかご容赦。
同じキャラクターが並ぶだけの文書を投稿するのが、気が引けたのと、問
題が起こるものをそのまま張りつけていいのかなぁ〜、と思ったためです。
サイズ的にはあまり変わりませんでしたね。
初めと終わりの2行を間引けば、もう少し気が利いていたかもしれない。

P.S. ish.com と ish32.dll では、タイムゾーンの設定によるものか、片
方で作ったものをもう一方で復元すると、作成日時が正しく戻らないこと
に気付きました。

[ ]
RE:03332 長い行を含む文章での検索No.03358
大森鉄工所 さん 99/05/23 21:33
 
こうすれば絶対に死んじゃうという条件がないみたいで、不思議です。
私の普段の環境ではサンプルのテキストで10回やれば10回死ぬんですが。

番頭++さんのマクロでも100%再現できます。でも、死に場所が違います。
HIDEMARU のページ違反です。
モジュール : KERNEL32.DLL、アドレス : 0137:bff780c0
Registers:
EAX=00000143 CS=0137 EIP=bff780c0 EFLGS=00010202
EBX=00580004 SS=013f ESP=005cf258 EBP=00580000
ECX=00000140 DS=013f ESI=00508a28 FS=1b1f
EDX=00580964 ES=013f EDI=000775dc GS=0000
Bytes at CS:EIP:
8b 08 81 e1 fc ff ff 0f 3b f9 76 04 85 c9 75 eb
Stack dump:
005cf420 00480000 00000000 00000000 bff79288 00480000 00508a28 000086e8
00000200 005cf420 00000000 0045c170 00000000 00508a28 02103704 00480000

話が、死ぬか死なないかという方にばかり行くのは本意でないので書きま
すが、異常終了はしないとしても問題はあると思うんです。仮に同じ文字
の並ぶ長い行を検索できないのは、正規表現のアルゴリズム上仕方がない
としても、検索対象の方をもっと簡単にしてくださいというのは、酷では
ないかという気がします。それと、どの場所が評価できないとか、何行目
をスキップしたとかの表示が必要だと思います。

初めてこの現象に出会ったとき、なにが(何行目のどの文字が、あるいは
本文なのか検索文字列なのかが)原因なのか悩みました。
この時の要因は連続した全角スペースでしたから、なお判らんがな。(^-^)

---
あと、いろいろやってみました。ご参考になるでしょうかぁ〜?

ルーラー表示や禁則処理の設定をいじると一時的に死ななくなったりしま
す。これが再現性の決定的な違いだなと思って文字の連続数を変えてみる
と死んでしまい、「ありゃ? 」

jre32.dllで死ぬことがあるのでこれを疑ってみましたが、 これこれのせ
いだと言えるような点は見付けられません。
・ Systemフォルダに jre.dllと jre32.DLLを置いているのですが、
   jre.dllを削除しても変わらない。
   もちろん全てのドライブ中に jre32.dllは1つしかない。
・ jre32.dllの内容は hm229.exeに同梱のものと一致する。
・ jre.datの内容には関係がないようだ。内容が違ってもファイル自体が
   なくても変わらない。削除後は Windowsの再起動を行った。

関係ないかもしれないですが、
行頭************************************
***行末
2行上中央(config "w80";movetolineno 40,lineno-1;)で‘*+$’を上検索、
挙動が変です。見つからないハズなのにそうはならない。

実験していると、見つからなかったときの .wav サウンドが鳴らなくなる
ことがありました。ほかの秀丸でも同様。また「もっと簡単にしてくださ
い」のメッセージが出て強制終了されない場合でも、初めの内はこのメッ
セージをOKで閉じると .wav が鳴りますがその内に鳴らなくなりました。
「失敗したときメッセージ表示」オフの場合。

――― マシンを換えた場合 ―――
コンピュータ:   NEC PC-9821 Cr13
                Pentium(r)
                47.0MB の RAM
システム:       Microsoft Windows 95 4.00.950a
Kernen32.dll:   v.4.00.952
                1996/05/23 15:17:52
秀丸エディタ:   v.2.18
Jre32.dll:      v.0000.0000.0117.001d
                1997/06/11 02:54:16

私のサンプルでは「もっと簡単にしてください」のメッセージは出るが確
実に殺すことはできません。文字数を変えて何度かやってみると殺せる。
確率3/20程度。死に場所は2種類。

HIDEMARU のページ違反です。
モジュール : KERNEL32.DLL、アドレス : 013f:bff780c0
Registers:
EAX=00000130 CS=013f EIP=bff780c0 EFLGS=00010206
EBX=00580004 SS=0147 ESP=005cf8a4 EBP=00580000
ECX=00000134 DS=0147 ESI=00504668 FS=0e7f
EDX=0249fdd4 ES=0147 EDI=0007b99c GS=0000
Bytes at CS:EIP:
8b 01 25 fc ff ff 0f 3b c7 73 04 85 c0 75 ec 8b
Stack dump:
005cfa68 00480000 00000000 00000000 bff79287 00480000 00504668 000086e8
00000200 005cfa68 0000003f 00458f48 00000000 00504668 01593704 00480000

HIDEMARU のページ違反です。
モジュール : JRE32.DLL、アドレス : 013f:01574416
Registers:
EAX=0000022e CS=013f EIP=01574416 EFLGS=00010206
EBX=00504681 SS=0147 ESP=005cf880 EBP=00459c00
ECX=0050468c DS=0147 ESI=000000f0 FS=0e7f
EDX=0249fc44 ES=0147 EDI=00504689 GS=0000
Bytes at CS:EIP:
89 44 b2 fc 8b 44 24 50 89 44 24 30 85 f6 0f 84
Stack dump:
ffffffff 00459c00 00458f48 0050466c 00991502 0050487c 024a0000 0249fc44
0249fab4 0249fe70 00000001 00000000 0000022a bff9e2ff 00000000 ffffffff


番頭++さんのマクロを実行するだけだと問題ないように見えますが、
続けて動作環境の設定をしようとすると死にます。確率5/5。

HIDEMARU のスタック エラーです。
モジュール : KERNEL32.DLL、アドレス : 013f:bff783e1
Registers:
EAX=00000140 CS=013f EIP=bff783e1 EFLGS=00010293
EBX=0048000c SS=0147 ESP=005cfb88 EBP=00000143
ECX=00480038 DS=0147 ESI=00000043 FS=0eef
EDX=000002d8 ES=0147 EDI=00480000 GS=0ee6
Bytes at CS:EIP:
8b 45 00 25 fc ff ff 0f 3b 44 24 1c 0f 83 85 00
Stack dump:
005cfc38 00000002 00000043 00580b70 00000167 bff793ce 00480000 000002d8
00000043 000002d0 00000400 005cfc8a bff74985 0041ccdc 00000042 000002d0

[ ]
RE:03358 長い行を含む文章での検索No.03364
秀丸担当 さん 99/05/24 18:56
 
>こうすれば絶対に死んじゃうという条件がないみたいで、不思議です。
>私の普段の環境ではサンプルのテキストで10回やれば10回死ぬんですが。
>
>番頭++さんのマクロでも100%再現できます。でも、死に場所が違います。

番頭++さんのマクロをやってみたところ、100%ではないですが、マクロ
実行後、秀丸と閉じようとしたときなどに死ぬことがありました。


>話が、死ぬか死なないかという方にばかり行くのは本意でないので書きま
>すが、異常終了はしないとしても問題はあると思うんです。仮に同じ文字
>の並ぶ長い行を検索できないのは、正規表現のアルゴリズム上仕方がない
>としても、検索対象の方をもっと簡単にしてくださいというのは、酷では
>ないかという気がします。それと、どの場所が評価できないとか、何行目
>をスキップしたとかの表示が必要だと思います。

たしかに、このエラーメッセージだけではわけがわからないので、JREが出
しているメッセージはJREが出しているということをわかるようにしようか
と思います。

またこの原因は検索結果が長すぎることにあると思うので、そこらへんにつ
いて調べてみます。

[ ]