BRegIf.DLLでページ違反発生?No.03704
水銀水 さん 99/07/13 12:39
 
 Arimacさん、初めましてm(_ _)m 水銀水と申します。
「BRegIf.DLL」をムチャクチャ快適に使わせて頂いております(^^)

ここ2ヶ月ほど、まったく問題なかったのですが、先日、下記
のようなページ違反が発生しましたので、報告します。
(「10.サポート」を読みましたが、秀丸の動作に直接影響
するようなので、こちらのボードに発言しましたが、マズイよ
うでしたらご指示下さい)

●ページ違反の再現性要素
 発生するのは、次の要素が重なる場合のようです。

(1)htmlファイルなどでカラー表示や強調文字をONにしている。
(2)1つの論理行の長さが長い文を含む。

ちなみに、ファイルタイプ別の設定で、上記をOFFにすると落ちません。
Arimacさんのところで再現できますでしょうか?

HIDEMARU のページ違反です。
モジュール : BREGEXP.DLL、アドレス : 014f:027f459f
Registers:
EAX=00004000 CS=014f EIP=027f459f EFLGS=00010206
EBX=004a9a46 SS=0157 ESP=005c0000 EBP=005df890
ECX=02e30595 DS=0157 ESI=02e30591 FS=64a7
EDX=02d20078 ES=0157 EDI=0000006e GS=0000
Bytes at CS:EIP:
57 e8 5b 33 00 00 83 c4 04 85 c0 74 08 8a 43 01
Stack dump:
000005fe 005df814 005df890 004a9a46 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 000005fe 005df814

●再現ファイルの特徴
 再現ファイルはごく普通のhtmlで、改行をどんどん削除す
る(特に再現性が高いのがOnMouseなどのJavaScriptがある
部分)と得られるようです。また、必要とあればメールします。


[ ]
RE:03704 RE:BRegIf.DLLでページ違反発生No.03705
Arimac さん 99/07/13 23:29
 
取り敢えず、再現ファイルをメールして下さい。
後のやり取りはメールでしましょう。
結果として秀丸エディタに関係があれば
再びここに戻ることにしましょう(^^;

p.s.
 日曜日に無事帰国しました(^^;
 といっても土日以外は毎日アクセスしてましたが(^^;

[ ]
RE:03705 RE:BRegIf.DLLでページ違反発生No.03708
水銀水 さん 99/07/14 16:29
 
> 日曜日に無事帰国しました(^^;
> といっても土日以外は毎日アクセスしてましたが(^^;
 うーむ、「国際化」なんて言葉が陳腐に感じられるくら
い、カッコいいです!(個人的には、一度でいいから、そ
んな言葉を話してみたいっす(^^;;;)

 これから再現ファイルをメールします。ま、個人的な
環境や特殊な設定が原因であれば、問題ないのですが…。



[ ]
RE:03705 RE:BRegIf.DLLでページ違反発生No.03776
Arimac さん 99/07/24 23:31
 
水銀水さん、馬場さん(BREGEXP.DLLの作者)と
メールで連絡を取り合って調査した結果、
正規表現「^.*」を使った場合に秀丸エディタの
規定のスタックサイズ(84KB)ではスタック
オーバーフローになる事が判明しました。

スタックサイズは単に設定の問題だけなので
editbinというツールを使って増やせば異常は
発生しなくなるのですが、このツールはVCの
開発ツールに含まれるものなのであまり一般的
ではありません。

書き換わっている部分は8バイトしかないので
差分ツールを使って差分部分のみを配布すると
いうのが現実的な選択のようです。

しかし、設定値とはいえEXEを書き換えるので
勝手に行なうと改変権の侵害の可能性が考えられ
ます(^^;(昔は結構やってたみたいな気がする(^^;)

この件について秀まるお様のご意見が伺えたら
有り難いのですが・・・(^^;
(秀丸エディタ側で何とかして貰えると嬉しい(^^;)

[ ]
RE:03776 RE:BRegIf.DLLでページ違反発生No.03784
秀丸担当 さん 99/07/26 16:49
 
>水銀水さん、馬場さん(BREGEXP.DLLの作者)と
>メールで連絡を取り合って調査した結果、
>正規表現「^.*」を使った場合に秀丸エディタの
>規定のスタックサイズ(84KB)ではスタック
>オーバーフローになる事が判明しました。

秀丸の指定している値を変えることで解決するのなら、
次のバージョンから増やしてもいいです。
でももし検索するテキストの大きさに比例してスタック
サイズが多く必要だとしたら増やしても意味がないです
が。

[ ]
RE:03784 RE:BRegIf.DLLでページ違反発生No.03788
Arimac さん 99/07/26 23:42
 
>秀丸の指定している値を変えることで解決するのなら、
>次のバージョンから増やしてもいいです。
>でももし検索するテキストの大きさに比例してスタック
>サイズが多く必要だとしたら増やしても意味がないです
>が。

そうなんです。
対象の文字数に依存してリカーシブコールの回数が
増えるそうなので単純に増やせば解決する訳では
ないのです。
しかし、必要なスタック量が文字数にどう比例する
のかは分かりませんが、2MBも確保すればよっぽど
無茶な使い方をしない限り大丈夫でしょう(^^;;
(Windowsの一般的なプログラムのスタック
 サイズは大概1MB)
スタックサイズはアドレスの予約だけの筈なので
起動時間が掛かるようになるとか、メモリーが
直ぐに足りなくなるというような事はないと思います。
WIN32ならアドレス空間が足りなくなる心配も
余りないと思います(^^;
とは言っても余り良い解決方法ではないので
馬場氏も最終的にはコードを直さなければならない
と言ってます・・・
(パターンマッチングのリカーシブコールをやめる
 のは多分ロジックの完全な作り直しの筈(^^;)
と言うことで秀丸エディタ側で対応して貰ったと
しても最終的ではないので、スタックサイズ変更
差分の配布の許可だけでもしてもらえると有り難い
のですが(^^;
必要な人は今のところ多分数人だけの筈だし・・・(^^;

[ ]
RE:03788 RE:BRegIf.DLLでページ違反発生No.03795
秀丸担当 さん 99/07/28 18:50
 
>そうなんです。
>対象の文字数に依存してリカーシブコールの回数が
>増えるそうなので単純に増やせば解決する訳では
>ないのです。
>しかし、必要なスタック量が文字数にどう比例する
>のかは分かりませんが、2MBも確保すればよっぽど
>無茶な使い方をしない限り大丈夫でしょう(^^;;
>(Windowsの一般的なプログラムのスタック
> サイズは大概1MB)

たしかに、デフォルトでは1MBですね。
なんで84KBにしてあるんだろう・・・。
問題なければ1MBにします。

差分の公開も、スタックサイズを変えるだけならかまいません。

[ ]
RE:03795 RE:BRegIf.DLLでページ違反発生No.03805
Arimac さん 99/08/01 23:11
 
>たしかに、デフォルトでは1MBですね。
>なんで84KBにしてあるんだろう・・・。
>問題なければ1MBにします。
>
>差分の公開も、スタックサイズを変えるだけならかまいません。

と言うことで差分を公開しました(^^;
http://www.urban.ne.jp/home/arimac/

[ ]
RE:03805 RE:BRegIf.DLLでページ違反発生No.03814
水銀水 さん 99/08/03 16:24
 

>>問題なければ1MBにします。
>>
>>差分の公開も、スタックサイズを変えるだけならかまいません。
>
>と言うことで差分を公開しました(^^;
>http://www.urban.ne.jp/home/arimac/

 と言うことで、早速、差分をあてて試用中ですが、今のと
ころ問題は発生しておらず、全く快適です(^^)

 帰国してすぐの忙しい中、本当にありがとうございました>Arimacさん

[ ]