Issue #7547 has been updated by davidderyldowney (David Deryl Downey).


 ~ is an alias in most shells which points at the home directory of the current user. It looks like whats happening is that mktmpdir() is seeing the ~ and trying to resolve it as the alias (which is why its doing the user lookup) but since its lacking the / after the ~ its resolving the passed value 'wut' as part of the username, which as you said, thankfully shouldn't exist and errors as it should.

It seems more like 1.8 was having incorrect behavior by not looking at the ~ as a user profile, or, 1.9 shouldn't be looking at the user profile. One of the two aren't operating correctly, and it would seem that 1.8 should have been paying attention to that.

Other than for ownerships of the file and thus RWX permission checks on the dir|file the file mktmpdir is being asked to create, why is it trying to resolve users in either case?

----------------------------------------
Bug #7547: Dir.mktmpdir('~something') tries to expand a profile directory
https://bugs.ruby-lang.org/issues/7547#change-34640

Author: jstanley0 (Jeremy Stanley)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin11.4.2]


A change to Dir.mktmpdir sometime between 1.8.7 and 1.9.3 introduced a bug when the prefix starts with a tilde character ('~').  If you try to use the prefix "~something", then instead of creating a subdirectory under the temporary directory named (e.g.) '~something-12345' (which is what ruby 1.8.7 does), it will try to resolve the profile directory for the (hopefully nonexistent) user 'something-12345'.

This is easy to reproduce in irb:

 neodymium:~ jeremy$ irb
 irb(main):001:0> require 'tmpdir'
 => true
 irb(main):002:0> Dir.mktmpdir('wut')
 => "/var/folders/9z/rqj62zxj60s3c12p2rdqm_3m0000gp/T/wut20121211-7622-1ff0o11"
 irb(main):003:0> Dir.mktmpdir('~wut')
 ArgumentError: user wut20121211-7622-1m76is9 doesn't exist
 	from /Users/jeremy/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/tmpdir.rb:132:in `expand_path'
 	from /Users/jeremy/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/tmpdir.rb:132:in `create'
 	from /Users/jeremy/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/tmpdir.rb:80:in `mktmpdir'
 	from (irb):3
 	from /Users/jeremy/.rbenv/versions/1.9.3-p327/bin/irb:12:in `<main>'
 irb(main):004:0> 
 


-- 
http://bugs.ruby-lang.org/