summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/tmpdir.rb6
-rw-r--r--test/test_tmpdir.rb12
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb
index 95d4ca3fce..55920a4a74 100644
--- a/lib/tmpdir.rb
+++ b/lib/tmpdir.rb
@@ -19,8 +19,10 @@ class Dir
# Returns the operating system's temporary file path.
def self.tmpdir
- ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @@systmpdir], ['/tmp']*2, ['.']*2].find do |name, dir = ENV[name]|
- next if !dir
+ ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @@systmpdir], ['/tmp']*2, ['.']*2].find do |name, dir|
+ unless dir
+ next if !(dir = ENV[name]) or dir.empty?
+ end
dir = File.expand_path(dir)
stat = File.stat(dir) rescue next
case
diff --git a/test/test_tmpdir.rb b/test/test_tmpdir.rb
index 0be2176bd9..1adb6a70b7 100644
--- a/test/test_tmpdir.rb
+++ b/test/test_tmpdir.rb
@@ -47,6 +47,18 @@ class TestTmpdir < Test::Unit::TestCase
end
end
+ def test_tmpdir_not_empty_parent
+ Dir.mktmpdir do |tmpdir|
+ envs = %w[TMPDIR TMP TEMP]
+ oldenv = envs.each_with_object({}) {|v, h| h[v] = ENV.delete(v)}
+ ENV[envs[0]] = ""
+ ENV[envs[1]] = tmpdir
+ assert_equal(tmpdir, Dir.tmpdir)
+ ensure
+ ENV.update(oldenv)
+ end
+ end
+
def test_no_homedir
bug7547 = '[ruby-core:50793]'
home, ENV["HOME"] = ENV["HOME"], nil