diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-14 12:50:13 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-14 12:50:13 +0000 |
commit | 92e9bf7a59acf3b625b6ae7e2020a49336213856 (patch) | |
tree | 58419ad68b8dd2d6d1795c1e45657768c0a5fb4b | |
parent | 4df4a7430865257795938c3dd791e3c0afee8778 (diff) | |
download | ruby-92e9bf7a59acf3b625b6ae7e2020a49336213856.tar.gz |
* lib/find.rb (Find.find): narrow rescue region.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26098 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | lib/find.rb | 23 | ||||
-rw-r--r-- | test/test_find.rb | 9 |
3 files changed, 25 insertions, 11 deletions
@@ -1,3 +1,7 @@ +Mon Dec 14 21:49:30 2009 Tanaka Akira <akr@fsij.org> + + * lib/find.rb (Find.find): narrow rescue region. + Mon Dec 14 09:20:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * lib/find.rb (Find.find): removed already unnecessary code. diff --git a/lib/find.rb b/lib/find.rb index 16a6a26069..7727bbdbbc 100644 --- a/lib/find.rb +++ b/lib/find.rb @@ -44,18 +44,19 @@ module Find rescue SystemCallError next end - begin - if s.directory? then + if s.directory? then + begin fs = Dir.entries(file) - fs.sort! - fs.reverse_each {|f| - next if f == "." or f == ".." - f = File.join(file, f) - paths.unshift f.untaint - } - end - rescue Errno::ENOENT, Errno::EACCES - end + rescue Errno::ENOENT, Errno::EACCES + next + end + fs.sort! + fs.reverse_each {|f| + next if f == "." or f == ".." + f = File.join(file, f) + paths.unshift f.untaint + } + end end end end diff --git a/test/test_find.rb b/test/test_find.rb index 7e9f21fdd4..6f61dd4f38 100644 --- a/test/test_find.rb +++ b/test/test_find.rb @@ -127,6 +127,15 @@ class TestFind < Test::Unit::TestCase } end + def test_dangling_symlink_stat_error + Dir.mktmpdir {|d| + File.symlink("foo", "#{d}/bar") + assert_raise(Errno::ENOENT) { + Find.find(d) {|f| File.stat(f) } + } + } + end + def test_enumerator Dir.mktmpdir {|d| File.open("#{d}/a", "w") |