[#24536] 「Rubyの落し方」 v.s. ruby_1_8 — akira yamada / やまだあきら <akira@...>

<URL:http://jp.rubyist.net/magazine/?0002-RubyCore>

40 messages 2004/10/20
[#24541] Re: 「Rubyの落し方」 v.s. ruby_1_8 — Yukihiro Matsumoto <matz@...> 2004/10/20

まつもと ゆきひろです

[#24599] 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/26

2004-10-20 (水) の 21:38 +0900 に Yukihiro Matsumoto さんは書きました:

[#24605] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-26 (火) の 16:16 +0900 に akira yamada / やまだあきら さんは書きました:

[#24606] Re: 1.8.2 preview3? — Yukihiro Matsumoto <matz@...> 2004/10/27

まつもと ゆきひろです

[#24608] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 11:48 +0900 に Yukihiro Matsumoto さんは書きました:

[#24620] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 12:42 +0900 に akira yamada / やまだあきら さんは書きました:

[#24629] Re: 1.8.2 preview3? — Tanaka Akira <akr@...17n.org> 2004/10/29

In article <1098888819.9446.14.camel@rice.p.arika.org>,

[ruby-dev:24622] Re: Zlib::Deflate#flush_next_in causes core dump on 1.8

From: akira yamada / やまだあきら <akira@...>
Date: 2004-10-27 17:19:53 UTC
List: ruby-dev #24622
2004-10-27 (水) の 23:59 +0900 に Tanaka Akira さんは書きました:
> 次のようにすると core を吐きます。
> 
> % ./ruby -rzlib -e '
> s = (1..100000).to_a.join()
> d = Zlib::Deflate.new
> Thread.new { Thread.pass;
>   p s.length;
>   o = d.flush_next_in
>   class << o
>   end
> }
> d.deflate(s)
> '
> 488895
> -e:7: [BUG] Segmentation fault
> ruby 1.8.2 (2004-10-27) [i686-linux]

こんな感じでどうでしょう:

Index: ext/zlib/zlib.c
===================================================================
RCS file: /var/cvs/src/ruby/ext/zlib/zlib.c,v
retrieving revision 1.7.2.10
diff -u -p -r1.7.2.10 zlib.c
--- ext/zlib/zlib.c	27 Oct 2004 02:46:51 -0000	1.7.2.10
+++ ext/zlib/zlib.c	27 Oct 2004 17:18:41 -0000
@@ -638,7 +638,13 @@ zstream_detach_input(z)
 {
     VALUE dst;
 
-    dst = NIL_P(z->input) ? rb_str_new(0, 0) : z->input;
+    if (NIL_P(z->input)) {
+	dst = rb_str_new(0, 0);
+    }
+    else {
+	dst = z->input;
+	RBASIC(dst)->klass = rb_cString;
+    }
     z->input = Qnil;
     return dst;
 }

-- 
やまだあきら / akira yamada  <http://arika.org>


In This Thread