Skip to content

Commit af7b020

Browse files
committed
Warn when environment variables skipped (fixes #2)
1 parent fc39e3b commit af7b020

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

lib/tmpdir.rb

+11-4
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@ class Dir
2020

2121
def self.tmpdir
2222
tmp = nil
23-
[ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp', '.'].each do |dir|
23+
['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @@systmpdir], ['/tmp']*2, ['.']*2].each do |name, dir = ENV[name]|
2424
next if !dir
2525
dir = File.expand_path(dir)
26-
if stat = File.stat(dir) and stat.directory? and stat.writable? and
27-
(!stat.world_writable? or stat.sticky?)
26+
stat = File.stat(dir) rescue next
27+
case
28+
when !stat.directory?
29+
warn "#{name} is not a directory: #{dir}"
30+
when !stat.writable?
31+
warn "#{name} is not writable: #{dir}"
32+
when stat.world_writable? && !stat.sticky?
33+
warn "#{name} is world-writable: #{dir}"
34+
else
2835
tmp = dir
2936
break
30-
end rescue nil
37+
end
3138
end
3239
raise ArgumentError, "could not find a temporary directory" unless tmp
3340
tmp

test/test_tmpdir.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ def test_world_writable
2121
envs.each do |e|
2222
tmpdirx = File.join(tmpdir, e)
2323
ENV[e] = tmpdirx
24-
assert_not_equal(tmpdirx, Dir.tmpdir)
24+
assert_not_equal(tmpdirx, assert_warn('') {Dir.tmpdir})
2525
File.write(tmpdirx, "")
26-
assert_not_equal(tmpdirx, Dir.tmpdir)
26+
assert_not_equal(tmpdirx, assert_warn(/not a directory/) {Dir.tmpdir})
2727
File.unlink(tmpdirx)
2828
ENV[e] = tmpdir
2929
assert_equal(tmpdir, Dir.tmpdir)
3030
File.chmod(0555, tmpdir)
31-
assert_not_equal(tmpdir, Dir.tmpdir)
31+
assert_not_equal(tmpdir, assert_warn(/not writable/) {Dir.tmpdir})
3232
File.chmod(0777, tmpdir)
33-
assert_not_equal(tmpdir, Dir.tmpdir)
33+
assert_not_equal(tmpdir, assert_warn(/world-writable/) {Dir.tmpdir})
3434
newdir = Dir.mktmpdir("d", tmpdir) do |dir|
3535
assert_file.directory? dir
3636
assert_equal(tmpdir, File.dirname(dir))

0 commit comments

Comments
 (0)