Forum: Ruby-core [ruby-trunk - Bug #7547][Open] Dir.mktmpdir('~something') tries to expand a profile directory

Posted by jstanley0 (Jeremy Stanley) (Guest)
on 2012-12-11 23:27
(Received via mailing list)
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>
Posted by D. Deryl Downey (ddd)
on 2012-12-11 23:55
(Received via mailing list)
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>
Posted by charliesome (Charlie Somerville) (Guest)
on 2012-12-12 11:48
(Received via mailing list)
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>
Posted by Tanaka Akira (Guest)
on 2012-12-12 13:04
(Received via mailing list)
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
No account? Register here.