Issue #7547 has been reported by jstanley0 (Jeremy Stanley).
----------------------------------------
Bug #7547: Dir.mktmpdir('~something') tries to expand a profile
directory
https://bugs.ruby-lang.org/issues/7547
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>
on 2012-12-11 23:27
on 2012-12-11 23:55
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>
on 2012-12-12 11:48
Issue #7547 has been updated by charliesome (Charlie Somerville).
=begin
(({Dir.mktmpdir})) uses (({File.expand_path})) internally, which is
responsible for expanding out the ~ to home directories. This behaviour
is totally intentional by (({File.expand_path})), but I'm not sure if it
was intended by the author of (({Dir.mktmpdir}))
=end
----------------------------------------
Bug #7547: Dir.mktmpdir('~something') tries to expand a profile
directory
https://bugs.ruby-lang.org/issues/7547#change-34654
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>
on 2012-12-12 13:04
2012/12/12 charliesome (Charlie Somerville)
<charlie@charliesomerville.com>:
> (({Dir.mktmpdir})) uses (({File.expand_path})) internally, which is responsible
for expanding out the ~ to home directories. This behaviour is totally intentional
by (({File.expand_path})), but I'm not sure if it was intended by the author of
(({Dir.mktmpdir}))
When I implemented Dir.mktmpdir first, I didn't assume Dir.mktmpdir
expands ~.
I think ~ should be expanded by shell as Unix.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.