From 7909af18edf02a924c8a9ace9e657c9651a93c76 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 13 Jan 2011 22:30:50 +0000 Subject: * io.c (argf_next_argv): go advance when the next file cannot be read. [ruby-core:34446] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30536 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 2 +- test/ruby/test_argf.rb | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index aff01fc664..23f4e71924 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Jan 14 07:30:47 2011 Nobuyoshi Nakada + + * 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 * vm_insnhelper.c: parenthesize macro arguments. diff --git a/io.c b/io.c index 834105031d..eafec788e5 100644 --- a/io.c +++ b/io.c @@ -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 -- cgit v1.2.3