From da1db8b454c6f8f0714d762c72815cf73efba4d8 Mon Sep 17 00:00:00 2001 From: usa Date: Tue, 31 May 2011 05:21:36 +0000 Subject: * io.c (rb_io_s_pipe): potential bug. the mode of read IO is set as DEFAULT_TEXTMODE in call of io_set_encoding(), and of write IO is also set as it in call of io_new_instance() via rb_protect(). so, if DEFAULT_TEXTMODE is not 0, we should check the result of extract_binmode() and avoid crush of default IO mode and the result. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'io.c') diff --git a/io.c b/io.c index 4e1945c549..cddab6aa00 100644 --- a/io.c +++ b/io.c @@ -8115,7 +8115,15 @@ rb_io_s_pipe(int argc, VALUE *argv, VALUE klass) rb_io_synchronized(fptr2); extract_binmode(opt, &fmode); +#if DEFAULT_TEXTMODE + if ((fptr->mode & FMODE_TEXTMODE) && (fmode & FMODE_BINMODE)) + fptr->mode &= ~FMODE_TEXTMODE; +#endif fptr->mode |= fmode; +#if DEFAULT_TEXTMODE + if ((fptr2->mode & FMODE_TEXTMODE) && (fmode & FMODE_BINMODE)) + fptr2->mode &= ~FMODE_TEXTMODE; +#endif fptr2->mode |= fmode; ret = rb_assoc_new(r, w); -- cgit v1.2.3