[Namazu-users-ja 437] Re: mknmzが止まる

Katsuhiko Satoh chikatsu @ cna.ne.jp
2005年 7月 12日 (火) 00:24:45 JST


佐藤です。

> 寺西です。
>
> Katsuhiko Satoh wrote:
> >
> > 早速、ダウンロードして解凍して問題のエクセルファイルをmknmzでインデック
ス作
> > 成を行いましたが、
> > 「Warning: working buffer overflow!」が多量に表示され、数分後止まってし
まい
> > ます。
>
> ということでしたら、
> ・xlhtml のバグ
> あるいは
> ・ファイルが壊れている
> のいずれかでしょう。
>
> # ただ、状況からすると前者かな?
>
> > 上記の条件判断があって、デバックを行いました。
> > WBUFF_SIZEを超えるbufidxはいくつかありましたが、問題のエクセルファイルの
中身
> > は長い文字とかないです。
> > 何故、こういう状況が起こるが、見当がつきません。
>
> main_line_processor で使うバッファのようですから、1行が長い、あるいは
> 複雑でデータサイズが大きいとかではないかと思います。(未確認)
>
> xlhtml.h の WBUFF_SIZE が 8240 ですから、この値をより大きなものに
> すると改善するかもしれません。

私もこの方法で既に試しましたが、改善できませんでした。
下記のようにデバックを追加し、バグを探しましたが、オーバーフローとなる原因が
掴めませんでした。

----------------------------------------------------------------------------
---
{
FILE *fp ;
fp = fopen( "/tmp/namazu/xlhtml.log", "a+" ) ;
fprintf( fp, "xlhtml(1): bufidx:%d >= WBUFF:%d, opcode:%d\n", bufidx,
WBUFF_SIZE
, opcode ) ;
fclose( fp ) ;
}

        /* Abort processing if too big. Next opcode will reset everything.
*/
        if (bufidx >= WBUFF_SIZE)
        {
                /* this will be printed many times; leave it this way since
it's
 temporary
                 * anyway - the buffer must be made dynamic
                 */
                fprintf(stderr, "Warning: working buffer overflow!\n");
                return;
        }

             :

        switch (opcode)
        {

             :

        }
{
FILE *fp ;
fp = fopen( "/tmp/namazu/xlhtml.log", "a+" ) ;
fprintf( fp, "xlhtml(2): bufidx:%d >= WBUFF:%d,opcode:%d\n", bufidx,
WBUFF_SIZE,
 opcode ) ;
fclose( fp ) ;
}
}
----------------------------------------------------------------------------
---
デバックを行った結果

・WBUFF_SIZEを10000に変更
      :
xlhtml(1): bufidx:36971 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:36972 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:36972 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:36973 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:36973 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:36974 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:36974 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:36975 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:36975 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:36976 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:36976 >= WBUFF:100000, opcode:252
xlhtml(2): bufidx:100001 >= WBUFF:100000,opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
xlhtml(1): bufidx:100001 >= WBUFF:100000, opcode:252
      :(数百回)
xlhtml(1): bufidx:0 >= WBUFF:100000, opcode:255
xlhtml(2): bufidx:0 >= WBUFF:100000,opcode:255
xlhtml(1): bufidx:0 >= WBUFF:100000, opcode:255
xlhtml(2): bufidx:0 >= WBUFF:100000,opcode:255
      :


・更にWBUFF_SIZEを100000に変更
      :
xlhtml(1): bufidx:36971 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:36972 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:36972 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:36973 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:36973 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:36974 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:36974 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:36975 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:36975 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:36976 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:36976 >= WBUFF:1000000, opcode:252
xlhtml(2): bufidx:1000001 >= WBUFF:1000000,opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
xlhtml(1): bufidx:1000001 >= WBUFF:1000000, opcode:252
      :(数百回)
xlhtml(1): bufidx:0 >= WBUFF:1000000, opcode:255
xlhtml(2): bufidx:0 >= WBUFF:1000000,opcode:255
xlhtml(1): bufidx:0 >= WBUFF:1000000, opcode:255
xlhtml(2): bufidx:0 >= WBUFF:1000000,opcode:255
      :

何故か、36976を過ぎると急に(WBUFF+1)に変わります。

エクセルファイルの中身は、マクロ(VB)とシートとの連携式を含まれています。
なかなか改善出来ないし、問題のエクセルファイル自体は壊れていないので、xlhtml
のバグでは?




Namazu-users-ja メーリングリストの案内