From: matz@... (Yukihiro Matsumoto) Date: 1997-09-10T15:50:35+09:00 Subject: [ruby-dev:450] Re: How to report a bug まつもと ゆきひろです In message "[ruby-dev:449] Re: How to report a bug" on 97/09/10, TAKAGI Hiromitsu writes: | > ruby のバージョンを替えてやってみるべきかもしれませんね…。 | |といいつつやってみました。ruby 1.0-970701 での結果です。 |ちょうど debugging symbol が入ってました。 |また挙動が違っていて、marshal 関係が見えてきています。 これは多分marshalで出力したファイルが壊れているんでしょう. |#3 0x2afac in xmalloc (size=4294967176) at gc.c:55 |#4 0x4a2c4 in str_new ( | ptr=0xefffd178 "[JavaHouse-Brewers:12442] Re: JAVA=?ISO-2022-JP?B?GyRCJSIlVy |VqJCskaSVWJWklJiU2JHJOKSRBJCIkMiRrSn0bKEI=?=\n=?ISO-2022-JP?B?GyRCSyEbKEI=?=", | len=4294967175) at string.c:44 ここで4294967175bytes(4Gbytes)の文字列を読み込もうとしていま す.marshalファイルの中の文字列の長さ情報がいかれているんで しょうね. 落ちにくくするように以下のようなパッチを作ってみましたが,い かがでしょう? まつもと ゆきひろ /:|) --- ext/marshal/marshal.c~ Mon Aug 4 16:38:36 1997 +++ ext/marshal/marshal.c Wed Sep 10 15:41:53 1997 @@ -502,3 +502,3 @@ -static char +static int r_bytes0(sp, s, len, arg) @@ -509,5 +509,8 @@ if (arg->fp) { - fread(s, 1, len, arg->fp); + len = fread(s, 1, len, arg->fp); } else { + if (arg->ptr + len > arg->end) { + len = arg->end - arg->ptr; + } memcpy(s, arg->ptr, len);