[ruby-dev:24376] Re: IO.popen dumps core

From: nobu@...
Date: 2004-09-30 09:47:17 UTC
List: ruby-dev #24376
なかだです。

At Thu, 30 Sep 2004 14:24:06 +0900,
Tanaka Akira wrote in [ruby-dev:24375]:
> 
> 次のようにすると core を吐きます。
> 
> % ./ruby -e '
> pname = Object.new
> mode = "\0" * 0x20000
> class << pname; self end.send(:define_method, :to_str) {
>   mode.replace "r"
>   "echo"
> }
> IO.popen(pname, mode)
> '

これが楽かなぁ。


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.292
diff -u -2 -p -r1.292 io.c
--- io.c	19 Sep 2004 18:42:31 -0000	1.292
+++ io.c	30 Sep 2004 09:45:08 -0000
@@ -2973,5 +2973,6 @@ rb_io_s_popen(argc, argv, klass)
     }
     else {
-	mode = StringValuePtr(pmode);
+	strncpy(mode = mbuf, StringValuePtr(pmode), sizeof(mbuf) - 1);
+	mbuf[sizeof(mbuf) - 1] = 0;
     }
     tmp = rb_check_array_type(pname);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next