From: nobu@... Date: 2004-12-17T00:45:04+09:00 Subject: [ruby-dev:25227] Re: Zlib::Deflate.deflate dumps core なかだです。 At Fri, 17 Dec 2004 00:00:00 +0900, Tanaka Akira wrote in [ruby-dev:25226]: > > 次のようにすると core を吐きます。 > > % catchsegv ./ruby -rzlib -ve ' > src = Object.new > class << src; self end.send(:define_method, :to_str) { > callcc {|k| $k = k } > "abc" > } > p Zlib::Deflate.deflate(src) > $k.call > ' > ruby 1.9.0 (2004-12-16) [i686-linux] > "x\234KLJ\006\000\002M\001'" > *** Segmentation fault inflateもでしょうか。 Index: ext/zlib/zlib.c =================================================================== RCS file: /cvs/ruby/src/ruby/ext/zlib/zlib.c,v retrieving revision 1.23 diff -U2 -p -d -r1.23 zlib.c --- ext/zlib/zlib.c 29 Oct 2004 01:06:36 -0000 1.23 +++ ext/zlib/zlib.c 16 Dec 2004 15:40:29 -0000 @@ -1210,4 +1210,5 @@ rb_deflate_s_deflate(argc, argv, klass) rb_scan_args(argc, argv, "11", &src, &level); + StringValue(src); zstream_init_deflate(&z); err = deflateInit(&z.stream, ARG_LEVEL(level)); @@ -1217,5 +1218,4 @@ rb_deflate_s_deflate(argc, argv, klass) ZSTREAM_READY(&z); - StringValue(src); zstream_run(&z, RSTRING(src)->ptr, RSTRING(src)->len, Z_FINISH); dst = zstream_detach_buffer(&z); @@ -1458,4 +1458,5 @@ rb_inflate_s_inflate(obj, src) int err; + StringValue(src); zstream_init_inflate(&z); err = inflateInit(&z.stream); @@ -1465,5 +1466,4 @@ rb_inflate_s_inflate(obj, src) ZSTREAM_READY(&z); - StringValue(src); zstream_run(&z, RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH); zstream_run(&z, "", 0, Z_FINISH); /* for checking errors */ -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦