aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-14 12:50:13 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-14 12:50:13 +0000
commit92e9bf7a59acf3b625b6ae7e2020a49336213856 (patch)
tree58419ad68b8dd2d6d1795c1e45657768c0a5fb4b
parent4df4a7430865257795938c3dd791e3c0afee8778 (diff)
downloadruby-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--ChangeLog4
-rw-r--r--lib/find.rb23
-rw-r--r--test/test_find.rb9
3 files changed, 25 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 1cc0efc950..9eeec203f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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")