From: matz@... (Yukihiro Matsumoto) Date: 2001-03-23T17:07:20+09:00 Subject: [ruby-dev:12641] Re: Marshal bug still remains まつもと ゆきひろです In message "[ruby-dev:12640] Re: Marshal bug still remains" on 01/03/23, EGUCHI Osamu writes: |> が正解のように思います。このパッチだと途中でnumがたまたまゼ |> ロになった時点でbreakしちゃいそう。 | | if (num == 0) break; | |の行を消して、0データによらず、 | | w_long(SHORTLEN(len), arg); /* w_short? */ | |で予め書いたワード数だけ必ず書き込むのが趣旨です。 えと、そうすると今のパッチではlenだけ書いちゃって SHORTLEN(len)にはならないのでは? \000\000\000\000\001\000 のようなケースで \000\000\000\000\001\000\000\000 を書いちゃうような気がします。 |> if (len == 0 && num == 0) break; | |は、書き込むワード数が変わるので、 |上で書くワード数の調整が必要では? その調整をしてるのがSHORTLEN(len)です。 まつもと ゆきひろ /:|)