立石です.

At Fri, 29 Sep 2000 07:30:17 +0900,
nobu.nakada / nifty.ne.jp wrote:
> > ./message.rb:254: warning: already initialized constant MOVE_MAIL
> > test.rb:8:in `iconv': bug?(output length = 258) (Iconv::OutOfRange)
> >         from test.rb:8
> > とエラーがでるのは,iconvのバグだと考えてよいのでしょうか?
> 
>   0.4.1 では通ってたんでしょうか。なら [ruby-ext:1288] から

エラーとなる場合の$!は,0.4.1,0.4.2,0.4.3-pre3のいずれでも,

#<Iconv::OutOfRange: 
["# -*- ruby -*-\r\n# Messages in English\r\n\r\nrequire \"base64\"\r\n\r\nmo..."],
["\"\r\n  RECEIVE_MAIL   = \"\353\260\233\354\235\200 \353\251\224\354\235..."]>

です.

>   これで GNU、Solaris も FreeBSD も問題が出ないようなら正式版に
> して RAA に登録しようかと思います。

まず,iconvのエラーコードとしてE2BIGが返ってきます.このときに
outlenに(-2)が入っています.このため,output length = 258
と返ってきてるようでした.そこで,

  char buffer[BUFFSIZE + 10];
  int  sizeof_buffer = BUFFSIZE

などのようにバッファを多くしてサイズはそのままにさせると通りは
しますが,今度は最後のほうで文字が切れているようです.やっぱり
途中でoutlenが-2になっていて,その直前のiconvのエラーはE2BIGです.

当面の回避策として現在は,バッファサイズに元の文字列の長さの数
倍をとっておいてE2BIGがでるのを防ぐという手段をとっています.

# 再現するCのコード書いてみてSunにも聞いてみます.
-- 
Takaaki Tateishi <ttate / jaist.ac.jp>