summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/tmpdir.rb2
-rw-r--r--test/test_tmpdir.rb11
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb
index c61365577e..e6cb327fc7 100644
--- a/lib/tmpdir.rb
+++ b/lib/tmpdir.rb
@@ -86,7 +86,7 @@ class Dir
}
if block_given?
begin
- yield path
+ yield path.dup
ensure
unless base
stat = File.stat(File.dirname(path))
diff --git a/test/test_tmpdir.rb b/test/test_tmpdir.rb
index c599dcf516..50583b5ce1 100644
--- a/test/test_tmpdir.rb
+++ b/test/test_tmpdir.rb
@@ -52,6 +52,17 @@ class TestTmpdir < Test::Unit::TestCase
}
end
+ def test_mktmpdir_mutate
+ bug16918 = '[ruby-core:98563]'
+ assert_nothing_raised(bug16918) do
+ assert_mktmpdir_traversal do |traversal_path|
+ Dir.mktmpdir(traversal_path + 'foo') do |actual|
+ actual << "foo"
+ end
+ end
+ end
+ end
+
def test_mktmpdir_traversal
assert_mktmpdir_traversal do |traversal_path|
Dir.mktmpdir(traversal_path + 'foo') do |actual|