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

ruby-changes:68026

From: nagachika <ko1@a...>
Date: Sat, 18 Sep 2021 16:50:42 +0900 (JST)
Subject: [ruby-changes:68026] e6e25b794d (ruby_3_0): merge revision(s) 13939d61b4b69bd109c5f41303c79868d639fa44: [Backport #17661]

https://git.ruby-lang.org/ruby.git/commit/?id=e6e25b794d

From e6e25b794d8db52e1df85a02f28846ad7eb82d49 Mon Sep 17 00:00:00 2001
From: nagachika <nagachika@r...>
Date: Sat, 18 Sep 2021 16:07:30 +0900
Subject: merge revision(s) 13939d61b4b69bd109c5f41303c79868d639fa44: [Backport
 #17661]

	Check if closed after each yield [Bug #17661]

	---
	 io.c                 |  4 +++-
	 test/ruby/test_io.rb | 36 ++++++++++++++++++++++++++++++++++++
	 2 files changed, 39 insertions(+), 1 deletion(-)
---
 io.c                 |  4 +++-
 test/ruby/test_io.rb | 36 ++++++++++++++++++++++++++++++++++++
 version.h            |  4 ++--
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/io.c b/io.c
index bc31c7b..521b0b0 100644
--- a/io.c
+++ b/io.c
@@ -3994,9 +3994,9 @@ rb_io_each_byte(VALUE io) https://github.com/ruby/ruby/blob/trunk/io.c#L3994
 	    char *p = fptr->rbuf.ptr + fptr->rbuf.off++;
 	    fptr->rbuf.len--;
 	    rb_yield(INT2FIX(*p & 0xff));
+	    rb_io_check_byte_readable(fptr);
 	    errno = 0;
 	}
-	rb_io_check_byte_readable(fptr);
 	READ_CHECK(fptr);
     } while (io_fillbuf(fptr) >= 0);
     return io;
@@ -4215,6 +4215,7 @@ rb_io_each_codepoint(VALUE io) https://github.com/ruby/ruby/blob/trunk/io.c#L4215
 	    fptr->cbuf.off += n;
 	    fptr->cbuf.len -= n;
 	    rb_yield(UINT2NUM(c));
+            rb_io_check_byte_readable(fptr);
 	}
     }
     NEED_NEWLINE_DECORATOR_ON_READ_CHECK(fptr);
@@ -4252,6 +4253,7 @@ rb_io_each_codepoint(VALUE io) https://github.com/ruby/ruby/blob/trunk/io.c#L4253
 	else {
 	    continue;
 	}
+        rb_io_check_byte_readable(fptr);
     }
     return io;
 
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index 9f9318e..58a739b 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -394,6 +394,24 @@ class TestIO < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_io.rb#L394
     }
   end
 
+  def test_each_byte_closed
+    pipe(proc do |w|
+      w << "abc def"
+      w.close
+    end, proc do |r|
+      assert_raise(IOError) do
+        r.each_byte {|byte| r.close if byte == 32 }
+      end
+    end)
+    make_tempfile {|t|
+      File.open(t, 'rt') {|f|
+        assert_raise(IOError) do
+          f.each_byte {|c| f.close if c == 10}
+        end
+      }
+    }
+  end
+
   def test_each_codepoint
     make_tempfile {|t|
       bug2959 = '[ruby-core:28650]'
@@ -405,6 +423,24 @@ class TestIO < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_io.rb#L423
     }
   end
 
+  def test_each_codepoint_closed
+    pipe(proc do |w|
+      w.print("abc def")
+      w.close
+    end, proc do |r|
+      assert_raise(IOError) do
+        r.each_codepoint {|c| r.close if c == 32}
+      end
+    end)
+    make_tempfile {|t|
+      File.open(t, 'rt') {|f|
+        assert_raise(IOError) do
+          f.each_codepoint {|c| f.close if c == 10}
+        end
+      }
+    }
+  end
+
   def test_rubydev33072
     t = make_tempfile
     path = t.path
diff --git a/version.h b/version.h
index 9380309..d619bf8 100644
--- a/version.h
+++ b/version.h
@@ -12,11 +12,11 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L12
 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
 #define RUBY_VERSION_TEENY 3
 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 133
+#define RUBY_PATCHLEVEL 134
 
 #define RUBY_RELEASE_YEAR 2021
 #define RUBY_RELEASE_MONTH 9
-#define RUBY_RELEASE_DAY 11
+#define RUBY_RELEASE_DAY 18
 
 #include "ruby/version.h"
 
-- 
cgit v1.1


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

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