[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7090] Re: [BUG] unpack('m')

From: 民斗 <tommy@...>
Date: 1999-06-09 03:32:44 UTC
List: ruby-dev #7090
民斗です。

[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終端になってないことがわかった。

--
民斗 <tommy@valley.ne.jp>

In This Thread