[前][次][番号順一覧][スレッド一覧]

ruby-changes:22067

From: nobu <ko1@a...>
Date: Sat, 24 Dec 2011 10:56:48 +0900 (JST)
Subject: [ruby-changes:22067] nobu:r34116 (trunk): * ext/readline/readline.c (readline_readline): check if outstream

nobu	2011-12-24 10:56:36 +0900 (Sat, 24 Dec 2011)

  New Revision: 34116

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34116

  Log:
    * ext/readline/readline.c (readline_readline): check if outstream
      is closed to get rid of a bug of readline 6.  [ruby-dev:45043]
      [Bug #5803]

  Modified files:
    trunk/ChangeLog
    trunk/ext/readline/readline.c
    trunk/test/readline/test_readline.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34115)
+++ ChangeLog	(revision 34116)
@@ -1,3 +1,9 @@
+Sat Dec 24 10:56:32 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/readline/readline.c (readline_readline): check if outstream
+	  is closed to get rid of a bug of readline 6.  [ruby-dev:45043]
+	  [Bug #5803]
+
 Sat Dec 24 06:59:49 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/readline/test_readline.rb (test_line_buffer__point): use
Index: ext/readline/readline.c
===================================================================
--- ext/readline/readline.c	(revision 34115)
+++ ext/readline/readline.c	(revision 34116)
@@ -40,6 +40,10 @@
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
 static VALUE mReadline;
 
 #define EDIT_LINE_LIBRARY_VERSION "EditLine wrapper"
@@ -372,6 +376,13 @@
     }
 
     if (!isatty(fileno(rl_instream)) && errno == EBADF) rb_raise(rb_eIOError, "closed stdin");
+    if (rl_outstream) {
+	struct stat stbuf;
+	int fd = fileno(rl_outstream);
+	if (fd < 0 || fstat(fd, &stbuf) != 0) {
+	    rb_raise(rb_eIOError, "closed stdout");
+	}
+    }
 
 #ifdef _WIN32
     rl_prep_terminal(1);
Index: test/readline/test_readline.rb
===================================================================
--- test/readline/test_readline.rb	(revision 34115)
+++ test/readline/test_readline.rb	(revision 34116)
@@ -303,6 +303,16 @@
     end
   end
 
+  def test_closed_outstream
+    bug5803 = '[ruby-dev:45043]'
+    IO.pipe do |r, w|
+      Readline.input = r
+      Readline.output = w
+      (w << "##\t").close
+      assert_raise(IOError, bug5803) {Readline.readline}
+    end
+  end
+
   private
 
   def replace_stdio(stdin_path, stdout_path)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]