mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 13939d61b4
: [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(-)
This commit is contained in:
parent
650af7d29d
commit
e6e25b794d
3 changed files with 41 additions and 3 deletions
4
io.c
4
io.c
|
@ -3994,9 +3994,9 @@ rb_io_each_byte(VALUE io)
|
|||
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)
|
|||
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)
|
|||
else {
|
||||
continue;
|
||||
}
|
||||
rb_io_check_byte_readable(fptr);
|
||||
}
|
||||
return io;
|
||||
|
||||
|
|
|
@ -394,6 +394,24 @@ class TestIO < Test::Unit::TestCase
|
|||
}
|
||||
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
|
|||
}
|
||||
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
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
# 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"
|
||||
|
||||
|
|
Loading…
Reference in a new issue