From: "民斗" Date: 1999-06-09T12:32:44+09:00 Subject: [ruby-dev:7090] Re: [BUG] unpack('m') 民斗です。 [Subject: [ruby-dev:7089] Re: [BUG] unpack('m')] [Date: Wed, 9 Jun 1999 11:17:07 +0900 From:Yukihiro Matsumoto] > |# STR2CSTR() したものって、'\0' 終端されていると仮定して良いんですよね? > えーと、便利なように番兵(sentinel)として NUL を置いてます。 > で、Cレベルでは文字列の中身はかなり勝手に操作できますから、 > 「仮定して良い」かと問われると困るんですが、一応標準的なライ > ブラリはNUL終端していると考えられた方が望ましいだろうなと思っ > ています。 了解しました。NUL終端を期待するようなコーディングはしないように します。 > |ん〜、ま、そりゃそうなんですけど、標準添付の kconv でも '\0' 終端を > |仮定しているみたいですし…。 > kconvにそういうコードがありました? だとするとそれはバグだと > 思います。どこか教えてください。1.3系のnkfにも残ってますか? 1.3.3-990518 で見てます。 kconv.c の kconv_kconv() で、RSTRING(src)->len は出力先バッファを 獲得する際にしか使用していないようです。 nkf の方は確認してません。 ちなみに、今回のは次のような経緯で見つかりました :-) 1. unpack('m') 後に kconv を使うとゴミがつくのを発見。 2. kconv のバグだろうと思ったけど、ソースを見るのが面倒だったので、 自力でコード変換プログラムを Ruby で書いてうまく動いた。 3. やっぱり遅かったので、C の拡張モジュールとして作り直したら kconv の時と同じ現象が出た。 4. unpack のソースを読んで、NUL終端になってないことがわかった。 -- 民斗