今日のテーマ   日々改造 (^_^;)         
[記事リスト(ツリー表示)]  [ 返信 ]   [新着記事] [最新50] [ワード検索] [過去ログ]

タイトル Tra_TAG.def のバグ
投稿日: 2018/12/02(日) 00:00
投稿者konno
 番 号 8632       コメント数 1

使用中の Tra_TAG.def に、致命的なバグがありました。(>_<)

WEBデータなどでは、1行の長さがとても長く改行の無い文章がありますが
Grep で検索したワードの一覧でも長いものがあり、これを Tra_TAG.def で
タグジャンプしたら、マクロ領域を壊して、VTDOSが落ちました。

オリジナルの Tra_TAG.def でも同様です。
オリジナルVZでも高橋版VZでも同様でした。

落ちるデータは、We140*22行あり、1行で3080文字を超えます。
3分割で改行を入れると落ちないので、一時バッファ溢れだと思いますが
今見ても全く分からないので、取りあえず泥縄で対策しました。

Tra_TAG.def の冒頭に

	dn[+, #] #? #< i=ly, #> i=(ly-i)*we+lx,	;1行の長さチェック
	(wn==0&&i>=255)?{ #< &x(254) #m #e}	;コンソール&行255以上なら改行
	#< dn],					;


これを入れたら取りあえず問題なくなりました。

:A	si=r-1, di=pq..134+100, i3,	;フルパス部分を di へ取り出し

この辺が怪しいと思うんですが、全く読めない。(;_;)
困ったときのFGALDC から、えむしさんの記事を引用します。m(__)m


> 07047/07051 xxxxxxxx  えむし           MAP
> (15)   97/07/23 09:02  07007へのコメント

>  とりあえず、私が持っている gz の MAP を書いておきます。

--------------------------------------------------------------------------

gz:0000h+---------------+
        |  psp          |
   0100 +---------------+  ORG
   0110 |               |  ◆pc
        |               |
        |               |
        |  wseg         |
   0206 |               |  変数テーブル
   028E |               |  ◆pq(pc+382)
        |               |
        +---------------+  pq+194(pn-156)
   03EC |               |  ◆pn(pq+350)
   0442 |               |  fg(pn+86)
   04D2 |               |  ◆mg(fg+144)
        |  dseg         |
   05B9 |               |  ◆pv(mg+231)
   062A |               |  ◆vp(pv+113)
        |               |                ↓
   0690 +---------------+ vp+102(pq..99)  -- ここまでvzと同じ
        |               |  コマンドキーテーブル
   08AA |               |  (pq..110)コマンドキーの説明書き
        |               |
   0F73 +---------------+ mh
        |  macro_buf    |
        |               |
    〜       〜
    〜       〜
        |               |
   AFD2 +---------------+  pq..131 pu-bc:削除バッファ
        | cbuff Bc byte |
   B3D2 +---------------+  pq..132 pu:スタックバッファ
        | ubuff Bu byte | マクロ用配列バッファ
        |   stack ↑    | スタックメモリの若い方へ積み上げる
   B452 +---------------+  pq..133 pu+bu:表示文字列バッファ
        | pfbufp 84byte | &m の時、ここでいったん文字列にしてから表示
   B4A6 +---------------+  pq..134 pu+bu+84:tmpbuf
        | tmpbuf 256byte| コマンドラインのラインバッファなどに使われる
   B5A6 +---------------+  pq..135 pu+bu+84+256:tmpbuf2
        |tmpbuf2 256byte| エイリアスの文字列はここで一度展開
   B6A6 +---------------+  pq..136 pu+bu+84+256*2:tmpbuf3
        |tmpbuf3 160byte| ディスク転送アドレス(DTA)
        |               |  &? は、ここで一度展開してから出力
        +---------------+
        |               |
   BA2C +---------------+  pq..142、pn..-33 pu+bu+1498
        |               |  コンバートされた検索文字列のバッファ
   BAAC +---------------+  pq..143
        |               |  コンバートされた置換文字列のバッファ
   BBB4 +---------------+  pq..141(pq..141)
        |               |  &^用のオプションの初期値
   CF2C +---------------+  pq..146
        | asm_stack?    |
   D02C +---------------+  pq..147
   DADC +---------------+ pn..-27(pq..148)wm+228
        | line_buf      |  (先頭はCR/LF実質wm+230が始め)
        |               |
   EADC +---------------+  pq..149
        |tmpbuf4 256byte|  256 バイトのテンポラリ領域(ラインバッファの直後)
        |               |  &z 等のマクロ組込時以外は比較的自由に使用できる
        +---------------+  pq..149+256   ラインバッファの終端
        |               |


引用ここまで --------------------

pq..134 を一時ワークとすると、最大でも256byte 
あとは、tmpbuf2 tmpbuf3 合わせても、672byte で、それをも突き破って
マクロ領域を壊してしまったと思われます。


    - No.8632 一括表示へ   -              [ 返信 ]    [引用無し] pre


- 関連一覧ツリー (先頭の番号をクリックするとツリー全体を一括表示します)
▼ 8632.Tra_TAG.def のバグ - konno 18/12/02-00:00
  ┗8633.Re: Tra_TAG.def のバグ - としき 18/12/02-11:54
   ┗8634.Re^2: Tra_TAG.def のバグ - konno 18/12/02-17:52
    ┗8635.Re^3: Tra_TAG.def のバグ - konno 18/12/02-23:44
     ┗8636.Tra_TAG.def 改 k04 - konno 18/12/04-23:17
      ┗8637.Tra_TAG.def 改 k05 - konno 18/12/25-03:13

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)   [引用無し]
おなまえ 
Eメール 
タイトル 
メッセージ auto soft pre(図表、プログラム) ※折り返さずに改行を入れてね
 参照先 
 暗証キー (英数字で8文字以内)
 プレビュー          

- 以下のフォームから自分の投稿記事を修正・削除することができます -
   処理   記事No   暗証キー
    [ページトップへ] [管理用]