diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | io.c | 2 | ||||
-rw-r--r-- | test/ruby/test_argf.rb | 15 |
3 files changed, 21 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Fri Jan 14 07:30:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * io.c (argf_next_argv): go advance when the next file cannot be + read. [ruby-core:34446] + Thu Jan 13 20:49:19 2011 Tanaka Akira <akr@fsij.org> * vm_insnhelper.c: parenthesize macro arguments. @@ -6829,7 +6829,6 @@ argf_next_argv(VALUE argf) } if (ARGF.next_p == 1) { - ARGF.next_p = 0; retry: if (RARRAY_LEN(ARGF.argv) > 0) { ARGF.filename = rb_ary_shift(ARGF.argv); @@ -6933,6 +6932,7 @@ argf_next_argv(VALUE argf) fptr->encs = ARGF.encs; clear_codeconv(fptr); } + ARGF.next_p = 0; } else { ARGF.next_p = 1; diff --git a/test/ruby/test_argf.rb b/test/ruby/test_argf.rb index b8b40ec077..0e709a204d 100644 --- a/test/ruby/test_argf.rb +++ b/test/ruby/test_argf.rb @@ -720,6 +720,21 @@ class TestArgf < Test::Unit::TestCase ensure argf.close end + end + def test_unreadable + bug4274 = '[ruby-core:34446]' + paths = (1..2).map do + t = Tempfile.new("bug4274-") + path = t.path + t.close! + path + end + argf = ARGF.class.new(*paths) + paths.each do |path| + e = assert_raise(Errno::ENOENT) {argf.gets} + assert_match(/- #{Regexp.quote(path)}\z/, e.message) + end + assert_nil(argf.gets, bug4274) end end |